11

SQL ServerLIKEのデータ型の列に対してどのようにステートメントを実行しますか?DateTime

次の SQL を実行すると、2009 年を含むすべての日付が返されます。

SELECT * FROM MyTable where CheckDate LIKE '%2009%'

ただし、10 月、11 月、12 月のすべての日付が必要な場合は、次のことができると予想されます。

SELECT * FROM MyTable where CheckDate LIKE '%2009-1%'

しかし、これは私に何も返しません!

日付文字列を入力するフィルター オプションをユーザーに提供し、ユーザーが入力するとデータをフィルター処理します。したがって、「20」と入力した場合、日付内に「20」を含むすべての日付を返したいと思います (したがって、これはすべての 2012 日付または 06/20/1999 のような日付値である可能性があります)。

誰でも助けることができますか?

SQL Server 2008 を使用しています。

前もって感謝します。

4

3 に答える 3

21

このDATEPART関数を使用して、日付の一部を抽出できます。また、達成しようとしていることについて、クエリをより明確にする必要があります。

SELECT * FROM MyTable
where DATEPART(year,CheckDate)=2009 and
      DATEPART(month,CheckDate) between 10 and 12

MONTH(やなどの具体的に名前が付けられた関数もありますが、 のすべてのコンポーネントにアクセスできるため、一貫性YEARを優先します)DATEPARTdatetime

datetimes が何らかの文字列形式を持つと考えないようにする必要があります。それらを文字列として扱うことは、遭遇するエラーの最大の原因の 1 つです。

于 2012-08-16T10:49:25.863 に答える
7

Like(何らかの理由で)演算子を使用する必要がある場合は、DateTime列をvarchar.

SELECT * 
FROM MyTable 
WHERE CONVERT(VARCHAR, CheckDate, 120) LIKE '%2009-1%'
于 2012-08-16T10:50:39.810 に答える
4

次のようなものを使用できます。

SELECT * 
FROM MyTable 
WHERE CheckDate >= '2009-10-01' AND CheckDate < '2010-01-01';
于 2012-08-16T10:50:07.173 に答える