2009-03-13 4 views
1
で働いていない次のクエリは、SQL 2000で正常に動作していないSQLでなぜ

は、誰も私を理解して助けてもらえ2005 SQLでSQL 2000または句は、SQL2005

2005それ誤りアウト「データをsmalldatetimeのためのcharデータ型の変換タイプが範囲外の小データ値になりました。 "

DECLARE @Table table(date varchar(6),code char(1)) 
INSERT INTO @Table select '010209','N' 
INSERT INTO @Table select '032809','N' 
INSERT INTO @Table select space(6),'N' 

select * FROM @Table 
WHERE 
(
     (
      date <> '' 
      AND   
      GETDATE() < CAST(LEFT(date, 2) + '/' + SUBSTRING(date, 3, 2) + '/' + RIGHT(date,2) AS SMALLDATETIME) 
    ) 
     OR code = 'Y') 
+0

我々がやると、この作品(LTRIM/RTRIMを使用して)動作しますLTRIM(RTRIM(日))<> '' が、なぜ、それはそれなしでSQL 2000で動作しません? – rsapru

答えて

2

はい、leppieは少し明確にされている可能性が、<> ''(6)あなたのスペースと一致していません。

これは

DECLARE @Table table(date varchar(6),code char(1)) 
INSERT INTO @Table select '010209','N' 
INSERT INTO @Table select '032809','N' 
INSERT INTO @Table select space(6),'N' 

select * FROM @Table 
WHERE 
(
     (
      ltrim(rtrim(date)) <> '' 
      AND   
      GETDATE() < CAST(LEFT(date, 2) + '/' + SUBSTRING(date, 3, 2) + '/' + RIGHT(date,2) AS SMALLDATETIME) 
    ) 
     OR code = 'Y') 
+0

それは働いたが、どうしてそれはSQL 2000でどんなエラーもスローされない。 – rsapru

+0

私は元のクエリでこれを試してみよう。どうもありがとう。私の愚かな間違い。 – rsapru

2

エラーはまさにそのとおりです。

あなたがどれほど試しても、'// 'は決して日付ではありません。

0

使用

date.RTRIM() <> '' 

代わりの

date <> ''