1

SQL Server 2008 にデータベース テーブルがあります。不明な理由でクエリが壊れています。

select release_id, url_id,tt_projectid, release_title, tech_area, current_state,     dateadd(ss,last_built,'12/31/1969 20:00:00') as recent_Date,
        autobuild_count, manualbuild_count, bcm_build_count, config_count, force_count, transition_only_count,
        auto_integ_count,last_auto_integ,dateadd(ss,integ_complete_date,'12/31/1969 20:00:00') as integ_date

        from tablename 
        where (auto_integ_count > 0
        and MONTH(last_auto_integ) = '1'
        and YEAR(last_auto_integ) = '2013')
        and (release_id > 36000)

        order by release_id desc

上記のクエリは問題なく動作しますが、where close の最後の行を 'and' から 'or' に変更すると、次の変換エラーが発生します。

Conversion failed when converting date and/or time from character string.

なぜ変わるのか不思議です

'and (release_id > 36000)'

'or (release_id > 36000)'

このようなエラーが発生します

4

3 に答える 3

3

その理由はlast_auto_integ、日付ではなく文字列として格納されているためです。句内のこれらの行は、--by occurstance --を使用whereして実行されていません。andrelease_id > 360000

私が見る限り、クエリには文字列を日付形式に変換している可能性のある場所は他にありません。

これらの値は、次を使用して識別できます。

select last_auto_integ
from tablename 
where isdate(last_auto_integ) = 0 and last_auto_integ is not null

次を使用して、クエリの問題を修正できますcase

where month(case when isdate(last_auto_integ) = 1 then last_auto_integ end) = 1 and
      year(case when isdate(last_auto_integ) = 1 then last_auto_integ end) = 2013

または、使用substring()している日付形式から月と年を抽出するために使用できます。

于 2013-06-21T17:25:26.943 に答える