RValues
だと思います 何らかの理由で、何らかのタイプの文字列列です。それを修正し、日付データ型を使用して日付データを保存する必要があります (明らかに、この混合バッグとは別の列に)。
それを修正できない場合は、次の方法で上記のダミアンの説明を防ぐことができます:
CASE WHEN ISDATE(RValues) = 1 THEN CONVERT(Date, RValues) END AS FechaFirma
(「日付」を NULL
にします SQL Server がそれを日付に変換する方法を見つけられない場合)
WHERE
を追加するだけでは、これを防ぐことはできません これは、SQL Server が SELECT
で変換を試行することが多いためです。 フィルターを実行する前にリストします (すべてはプランによって異なります)。サブクエリ、CTE、結合順序のヒントなどを使用して操作の順序を強制することもできません。 この問題に関する未解決の Connect アイテムがあります - 彼らは「認識しており」、「将来のバージョンで対処することを望んでいます」
."
変換を試みる前に SQL Server に ISDATE() の結果を評価させる CASE 式の略 (ブランチのいずれにも集約が存在しない限り )、次のことができます:
- フィルタリングされた結果を #temp テーブルにダンプし、続いてその #temp テーブルから選択して、変換のみを適用します。
- 単に文字列を返し、それをクライアントで日付として扱い、YEAR/MONTH などの部分を抽出します
- 文字列操作で YEAR =LEFT(col,4) などを取得するだけ <リ>
TRY_CONVERT()
を使用します
あなたが SQL Server 2012 を使用していることに気付いたので:
TRY_CONVERT(DATE, RValues) AS FechaFirma