VARCHAR
SQLServerテーブルの特定の列で最長のものを見つけたい。
次に例を示します。
ID = INT IDENTITY
DESC = VARCHAR(5000)
ID | Desc
---|-----
1 | a
2 | aaa
3 | aa
3を返すSQLは何ですか?最長値は3文字なので?
回答:
以下のためのMySQLはその長さではないLEN
SELECT MAX(LENGTH(Desc)) FROM table_name
気を付けて!!スペースがある場合、T-SQLのLENメソッドでは考慮されません。これをだまして使用させないでください
select max(datalength(Desc)) from table_name
Oracleの場合、LENではなくLENGTHでもあります
SELECT MAX(LENGTH(Desc)) FROM table_name
また、DESCは予約語です。多くの予約語は多くの状況で列名に対して引き続き機能しますが、そうすることは悪い習慣であり、状況によっては問題を引き起こす可能性があります。それらは理由のために予約されています。
Descという単語が例として使用されているだけの場合、誰もがそれを理解するわけではありませんが、多くの人はそれがDescendingの予約語であることに気付くでしょう。個人的には、これを使って始めて、予約語しかなかったので、列名がどこにあるのかを調べようとしました。それを理解するのにそれほど時間はかかりませんでしたが、実際の列名の代わりに何を使用するかを決定するときは、このことを念頭に置いてください。
SELECT TOP 1 column_name, LEN(column_name) AS Lenght FROM table_name ORDER BY LEN(column_name) DESC
多くの場合、その列の長さが最も長い行を特定する必要があります。特に、テーブル内の行の列の長さが他の行よりもはるかに長い理由を調べるためにトラブルシューティングを行う場合は特にそうです。このクエリは、行がどの行であるかを識別するために、行に識別子をリストするオプションを提供します。
select ID, [description], len([description]) as descriptionlength
FROM [database1].[dbo].[table1]
where len([description]) =
(select max(len([description]))
FROM [database1].[dbo].[table1]