13

isupperpostgresqlのようなまたはまたはpostgresql内の関数を見つけることができませんでしたislower。私が実際に必要としているのは、テーブルからすべてのレコードを選択することです。ここで、列の1つに大文字の(大文字ではない)単語が含まれています。つまり、各単語の最初の記号は大文字で、2番目の記号は小文字です。言葉はどんな言語でも書くことができます。

4

4 に答える 4

32

列の最初の文字の大文字と小文字が列の最初の文字の小文字と等しくない行を選択するのはどうですか?

何かのようなもの:

SELECT * FROM table 
    WHERE SUBSTRING(col FROM 1 FOR 1) != LOWER(SUBSTRING(col FROM 1 FOR 1))

理論的には、上記ではデータベースの文字セット/ロケールも考慮に入れる必要があります。

于 2012-12-04T16:38:35.607 に答える
15

Postgres 正規表現を使用して、特定の条件をテストできます。

select * from sample 
where col ~ E'^[[:upper:]][^[:upper:]]'

E'^[[:upper:]][[:lower:]]'2 番目の文字が大文字以外ではなく小文字のアルファである必要がある場合に使用できます。

于 2012-12-04T17:40:09.190 に答える
1

postgresql文字列の比較では大文字と小文字が区別されるため、BobG の回答の方が優れています

別の解決策は、文字列関数でasciiを使用することです

このような

SELECT * 
FROM yourTable
WHERE (ascii(LEFT(yourColumn), 1) BETWEEN 65 AND 90) 
  AND (ascii(SUBSTRING(yourColumn from 2 for 1), 1) BETWEEN 97 AND 122)

リンクしたASCIIテーブルでわかるように、65から90の間の場合は大文字です

97 ~ 122 の場合は小文字です。

于 2012-12-04T16:36:56.887 に答える