Iiには、次の方法でSQL Serverに値が格納されています。02-Jul-12 12:00:00 AM
ここでは、時間と分、秒は、など02-Jul-12 12:15:52 PM
のように02-Jul-12 6:02:12 AM
なります。
次のように、時刻を省略して日付に基づいてデータを取得するwhere条件が必要です。where some_Date='02-Jul-12'
どうすればいいですか?
Iiには、次の方法でSQL Serverに値が格納されています。02-Jul-12 12:00:00 AM
ここでは、時間と分、秒は、など02-Jul-12 12:15:52 PM
のように02-Jul-12 6:02:12 AM
なります。
次のように、時刻を省略して日付に基づいてデータを取得するwhere条件が必要です。where some_Date='02-Jul-12'
どうすればいいですか?
SELECT * FROM whatever WHERE some_Date LIKE '02-Jul-12%';
SELECT * FROM dbo.tbl_MyTable
WHERE
REPLACE(CONVERT(VARCHAR(9), DateTimeValueColumn, 6), ' ', '-')='02-Jul-12'
また
コードの変更については、getdate 関数 voncert を使用する代わりに、datetime 形式の日付文字列を使用し、このフォロー クエリを比較してください。
SELECT * FROM dbo.tbl_MyTable
WHERE
CAST(CONVERT(CHAR(10), DateTimeValueColumn, 102) AS DATE) =
CAST(CONVERT(CHAR(10),GETDATE(),102) AS DATE)
SQL2008 以降を使用している場合は、にキャストできDATETIME
ますDATE
。
この投稿を参照してください: http://blog.sqlauthority.com/2012/09/12/sql-server-get-date-and-time-from-current-datetime-sql-in-sixty-seconds-025-video/
ただし、WHERE 句では、次のように日付を検索する方が適切です。
DECLARE @startDate DATETIME = '02-Jul-2012'
DECLARE @endDate DATETIME = DATEADD(DAY, 1, @startDate)
SELECT * FROM [table] WHERE [some_Date] BETWEEN @startDate AND @endDate
今日の日付 (時刻ではない) の行を選択するには
select * from myTable where datediff(dd, dateColumn, getdate()) = 0
日付を文字として保存する場合 (推奨されません)、少なくとも ISO 形式を使用する必要があります: YYYY-MM-DD hh:mm:ss。これにより、日付は並べ替えや比較に役立ちます ("<" は機能し、">" は機能し、"between" は等号と同様に機能します)。
日付を抽出するには、 を使用できますleft(datestr, 10)
。フォーマットでは、次を使用します。
where left(datestr, 9) = '01-Jan-13'
フィールドをdatetime
またはとして格納しsmalldatetime
ている場合、文字列として格納されていると考えるかもしれません。ではない。これらは、特定の日付からの日数として保存され、日の部分は小数日として保存されます。SQL Server 2005 以降を使用している場合、最善の方法は次のとおりです。
where cast(datetime as date) = '2013-01-01' -- I recommend ISO formats, even for constants. '20130101' is even better