1

大文字の拡張子で終わる列を選択する必要があります。

たとえば、次の表を見てください。

id - picture
1 - abc.JPG
2 - def.jpg
3 - 123.jpg
4 - xyz.JPG

JPG は大文字であるため、結果は行 1 と 4 を与えるはずです。

誰でも助けることができますか?

4

4 に答える 4

3

私は専門家ではありませんが、大文字と小文字の区別で電話を切られたことがあります。テーブルの構造を変更できますか? テーブルの照合順序を次のように変更すると、解決する可能性があります (ここでは SQLFiddle )。

CREATE TABLE pics (id INT, picture VARCHAR(200))
CHARACTER SET latin1 COLLATE latin1_general_cs;
INSERT INTO pics VALUES 
(1, 'abc.JPG'),
(2, 'def.jpg'),
(3, '123.jpg'),
(4, 'xyz.JPG')

は の_cs略でcase sensitive、デフォルトでは大文字と小文字が区別されないため、大文字と小文字を区別した比較が少し難しくなっていると思います。次に、次のクエリを使用して行を取得できます。

SELECT *
FROM pics
WHERE picture REGEXP '\.[[:upper:]+]$'

基になるテーブルにアクセスできない場合は、次の方法を試すことができます。これにより、列が別の文字セットにキャストされ ( latin1)、大文字と小文字を区別しない比較をサポートするように照合順序が変更されます (ここでは SQLFiddle )。

SELECT *
FROM pics
WHERE CAST(picture AS CHAR CHARACTER SET latin1) 
      COLLATE latin1_general_cs REGEXP '\.[[:upper:]+]$'
于 2012-11-06T03:00:33.673 に答える
1

一部の REGEXP:

'[.][[:upper:]]+$' -- 大文字のみ

'[.].*[[:upper:]]' -- 少なくとも 1 つの大文字

'[.].*[[:lower:]]' -- 少なくとも 1 つの小文字。AND と一緒に、上下を取得します。

「。」が2つあれば。ファイル名に SUBSTRING_INDEX(picture, '.', -1) を使用して「拡張子」を分離することを検討してください。

于 2012-11-06T03:51:52.080 に答える
0

ほとんどの SQL 言語には、テキストを大文字に変換するための UCASE または UPPER 関数があります。また、すべての SQL ダイアレクトにはない RIGHT 関数も利用しています。SQL に RIGHT 関数がない場合は、正しい 3 文字を画像に表示するために SUBSTRING と LENGTH を操作する必要があります。

Select id, picture
  from table
 where UPPER(RIGHT(TRIM(picture),3)) = RIGHT(TRIM(picture),3)

大文字に変換された同じテキストが変換されていないテキストと同じ場合、データベースでは大文字であり、選択されます。

于 2012-11-06T03:22:13.307 に答える
0

ファイル拡張子が 3 文字であると常に想定できるとは限らないため、以下を使用してピリオドの後の最初のグラフを取得し、それを比較して大文字かどうかを確認できます。

select * from table where SUBSTRING(picture,CHARINDEX('.',picture) + 1,1) 
   = upper(SUBSTRING(picture,CHARINDEX('.',picture) + 1,1)) collate SQL_Latin1_General_CP1_CS_AS

ここに画像の説明を入力

于 2012-11-06T03:25:50.607 に答える