web-dev-qa-db-ja.com

SQL Serverで日付のみを使用してDATETIMEフィールドを照会する方法

簡単な質問ですが、まだ解決できません。

このように、DATETIMEフィールドを持つテーブルTESTがあります。

ID NAME DATE
1 TESTING 2014-03-19 20:05:20.000

私が必要としているのは、次のクエリで、この行と、2014年3月19日のすべての行が、時刻に関係なく返されることです。

select * from test where date = '03/19/2014';

しかし、それは行を返しません。仕事をする唯一の方法は時間も指定することです。

select * from test where date = '03/19/2014 20:03:02.000';

前もって感謝します !

66
delphirules

範囲を使用、またはDateDiff関数

 select * from test 
 where date between '03/19/2014' and '03/19/2014 23:59:59'

または

 select * from test 
 where datediff(day, date, '03/19/2014') = 0

他のオプションは以下のとおりです。

  1. データベーススキーマを管理していて、勤怠データが必要ない場合は、削除します。

  2. または、保持する必要がある場合は、日付値の時間部分を削除した計算列属性を追加します.

Alter table Test Add DateOnly As DateAdd(day, datediff(day, 0, date), 0)

または、最新バージョンのSQL Serverでは...

Alter table Test Add DateOnly As Cast(DateAdd(day, datediff(day, 0, date), 0) as Date)

それなら、あなたは単純に以下のようにクエリを書くことができます。

select * from test 
where DateOnly = '03/19/2014'
91
Charles Bretana

簡単な答え

select * from test where cast ([date] as date) = '03/19/2014';
39
kabcha

私はMySQL 5.6を使用しており、日付時刻から日付部分のみを抽出するDATE関数があります。したがって、この問題に対する簡単な解決策は - です。

 select * from test where DATE(date) = '2014-03-19';

http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html

18
Goku__
select * from test 
where date between '03/19/2014' and '03/19/2014 23:59:59'

これは本当に悪い答えです。二つの理由があります。

1. 23.59.59.700などのような時に起こること23:59:59と次の日より大きい時があります。

2.動作はデータ型によって異なります。クエリは、datetime/date/datetime2型に対して異なる動作をします。

23:59:59.999でテストすると、日付タイプによって丸めが異なるため、さらに悪くなります。

select convert (varchar(40),convert(date      , '2014-03-19 23:59:59.999'))
select convert (varchar(40),convert(datetime  , '2014-03-19 23:59:59.999'))
select convert (varchar(40),convert(datetime2 , '2014-03-19 23:59:59.999'))

- 日付の場合、値は「切り刻まれた」。 - datetimeの場合、値は次の日付に切り上げられます。 (最も近い値) - datetime2の場合、値は正確です。

3
Ben

これを試して

 select * from test where Convert(varchar, date,111)= '03/19/2014'
2
Amit

あなたはこれを試すことができます

select * from test where DATEADD(dd, 0, DATEDIFF(dd, 0, date)) = '03/19/2014';
1
HeLL

これは私のためにMS SQLサーバのために働きます:

select * from test
where 
year(date) = 2015
and month(date) = 10
and day(date)= 28 ;
1
Jeroen Krah

あなたは時間部分を切り捨てるこのアプローチを使うことができます:

select * from test
where convert(datetime,'03/19/2014',102) = DATEADD(dd, DATEDIFF(dd, 0, date), 0)
0
Tim Schmelter
select *
  from invoice
 where TRUNC(created_date) <=TRUNC(to_date('04-MAR-18 15:00:00','dd-mon-yy hh24:mi:ss'));
0
PanSQL
-- Reverse the date format
-- this false:
    select * from test where date = '28/10/2015'
-- this true:
    select * from test where date = '2015/10/28'
0
Sherif Hamdy

日付と言語に問題があり、それを回避するには、YYYYMMDDという形式の日付を要求します。

下のリンクによると、下のこの方法が最速です。 SQL Server 2012にチェックインし、リンクに同意します。

select * from test where date >= '20141903' AND date < DATEADD(DAY, 1, '20141903');
0
mako

このクエリをテストしてください。

SELECT *,DATE(chat_reg_date) AS is_date,TIME(chat_reg_time) AS is_time FROM chat WHERE chat_inbox_key='$chat_key' 
                         ORDER BY is_date DESC, is_time DESC
0
Programer_saeed

単にあなたのWHERE節でこれを使ってください。

下の "SubmitDate"の部分は列名ですので、あなた自身のものを挿入してください。

これにより、結果の「年」部分のみが返され、分などは省略されます。

Where datepart(year, SubmitDate) = '2017'
0
user8161541
select *, cast ([col1] as date) <name of the column> from test where date = 'mm/dd/yyyy'

"col1"は日付と時刻を含む列の名前です
<列名>ここで名前を自由に変更できます

0
NGoyal