私が今までに見た中で最も奇妙に照合されたデータベースで作業しています。私は十分に簡単なケースステートメントを実行しています。SQL Server Case Statementフィールドが空白の場合は、フィールド全体の内容が返されます
コード:
SELECT CASE
WHEN PMA_DESC = ' ' THEN dbo.CAN_TBL.CAN_DESC
ELSE 'NO DESCRIPTION'
END AS PMA_DESC
, PMA_PART_ONLY
, PMA_ANAL_FIELD1
, CAN_DESC
, PMA_CREATED
, PMA_UPDATED
FROM dbo.PMA_TBL INNER JOIN
dbo.CAN_TBL ON dbo.PMA_TBL.PMA_ANAL_FIELD1 = dbo.CAN_TBL.CAN_CODE
WHERE (CAST(dbo.PMA_TBL.PMA_CREATED AS DATE) >= DATEADD(dd, - 3, CAST(GETDATE() AS DATE)) OR
CAST(dbo.PMA_TBL.PMA_UPDATED AS DATE) >= DATEADD(dd, - 3, CAST(GETDATE() AS DATE))) AND (dbo.PMA_TBL.PMA_DESC IS NOT NULL)
case文の最初の部分はスペースが、何が移入されたカラム内の唯一の44の記録にもかかわらず、列全体を返しPMA_DESC
フィールドにスペースを探していること。それで、フィールド内のスペースを見つけ出し、フィールドの内容全体を肯定的な結果として返します。 3 1/2年前にSQL Serverを使い始めて以来、私はそれを見たことがありません。それはデータベースの照合と関係がありますか?私はこれが大文字と小文字の区別を強制するように設定されていることを知っています(yay)。
結果の選択。
PMA_DESC PMA_PART_ONLY PMA_ANAL_FIELD1 CAN_DESC
NO DESCRIPTION 82240069 82 GLACIER MTM
NO DESCRIPTION 8228399 82 GLACIER MTM
NO DESCRIPTION 8235579 82 GLACIER MTM
最初の列の結果は、すでに自分の個々の部分の説明があったが、彼らは単語の間にスペースが含まれているため、case文はにそれを変えた「NO DESCRIPTION」。それは間違いないでしょうか?
どのようにして[field] = ' '
は空白の周囲のテキストを確認できますか?順序SQL_Latin1_General_CP1_CI_AS
* "これはデータベースの照合と何か関係ありますか?" - おそらく。なぜその照合が指定されていないのですか?また、いくつかの最小限の完全で再現可能な例を作成することで、問題を解決するのに役立ちます。 –
はい、そうです、良い点。プロパティでそれを見つけた後に追加しました。ありがとう。 –
照合は* spaces *とは関係ありません。これはANSI SQLの標準規格です(ここで説明します)(https://support.microsoft.com/en-us/help/316626/inf-how-sql-server-compares-strings-with-trailing-spaces)。比較の前に文字列をスペースで埋めて、両辺の長さが同じであることを確認します。 'LEN()'または 'DATALEN()'を使用するか、空白にマッチさせる場合は 'LIKE '' 'を使用してください。 –