簡単な質問ですが、まだ解決できません。
このように、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';
前もって感謝します !
範囲を使用、または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
他のオプションは以下のとおりです。
データベーススキーマを管理していて、勤怠データが必要ない場合は、削除します。
または、保持する必要がある場合は、日付値の時間部分を削除した計算列属性を追加します.
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'
簡単な答え
select * from test where cast ([date] as date) = '03/19/2014';
私は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
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の場合、値は正確です。
これを試して
select * from test where Convert(varchar, date,111)= '03/19/2014'
あなたはこれを試すことができます
select * from test where DATEADD(dd, 0, DATEDIFF(dd, 0, date)) = '03/19/2014';
これは私のためにMS SQLサーバのために働きます:
select * from test
where
year(date) = 2015
and month(date) = 10
and day(date)= 28 ;
あなたは時間部分を切り捨てるこのアプローチを使うことができます:
select * from test
where convert(datetime,'03/19/2014',102) = DATEADD(dd, DATEDIFF(dd, 0, date), 0)
select *
from invoice
where TRUNC(created_date) <=TRUNC(to_date('04-MAR-18 15:00:00','dd-mon-yy hh24:mi:ss'));
-- Reverse the date format
-- this false:
select * from test where date = '28/10/2015'
-- this true:
select * from test where date = '2015/10/28'
日付と言語に問題があり、それを回避するには、YYYYMMDDという形式の日付を要求します。
下のリンクによると、下のこの方法が最速です。 SQL Server 2012にチェックインし、リンクに同意します。
select * from test where date >= '20141903' AND date < DATEADD(DAY, 1, '20141903');
このクエリをテストしてください。
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
単にあなたのWHERE
節でこれを使ってください。
下の "SubmitDate"の部分は列名ですので、あなた自身のものを挿入してください。
これにより、結果の「年」部分のみが返され、分などは省略されます。
Where datepart(year, SubmitDate) = '2017'
select *, cast ([col1] as date) <name of the column> from test where date = 'mm/dd/yyyy'
"col1"は日付と時刻を含む列の名前です
<列名>ここで名前を自由に変更できます