2017-09-28 4 views
3

1日の午後5時から翌日の午前7時までのチケット数を返す必要があります。 私がDATEADDを使用して次のクエリを使用してみましたが、それはどんな結果を返すされていません。SQLアシスタンス次の日の午後5時から午後7時までの日付を使用して、データベースに対してクエリを実行しますか?

SELECT * FROM dbo.TicketIncidents 
WHERE IncidentReportedDt BETWEEN 
DATEADD(hh,17,CONVERT(VARCHAR(32), GETDATE(),110)) 
and DATEADD(hh,7,CONVERT(VARCHAR(32), GETDATE()+1,110)) 

誰もが、この作品を作ることに何か提案がありますか?あなたの援助は非常に高く評価されます。

+2

あなたは – mbadeveloper

+0

IncidentReportedDtがvarchar型または日時であるとの比較フォーマットと一致するIncidentReportedDt列の形式を確認する必要がありますか? – MtwStark

+0

私のサーバー上で実行すると、varcharからdatetimeへのプラットフォーム依存の暗黙的な変換のため、変換エラーです – MtwStark

答えて

-1

私は日時に再びそれを変換するために、プラットフォームに依存する形式でvarchar型への変換日付が非最良の方法ですので、あなたが

DATEADD(hh, 17, CONVERT(DATETIME, CONVERT(DATE, GETDATE()))) 

代わりの

DATEADD(hh,17,CONVERT(VARCHAR(32), GETDATE(),110)) 

を使用すべきだと思いますそれを行うには

私のイタリア語サーバーで構文がvarcharからdatetimeに変換エラーを投げる

+0

理由を説明してください。 – MtwStark

+0

'DATETIME'の' TIME'部分を切り捨てるのに最適な方法ではありませんが、それはナンセンスではありません。あなたの答えは現在の時刻に17時間を追加し、日付だけを保持して時間を落とし、 'VARCHAR'にも変換します。それはOPが望んでいるものではありません。 – Siyual

+0

GETDATE()をVARCHARに変換するのは間違いです。TIME部分を切り捨てたい場合はDATEにCONVERTを使用し、DATE/DATETIMEが必要なDATEADDを使用した後にsql-serverを再度変換する必要があるからです。 DATE – MtwStark

2

は、CASTを使用して31時間を追加してみてください:

Declare @date as datetime = '2017-09-29 12:00:00.000' 

SELECT * FROM dbo.TicketIncidents 
WHERE IncidentReportedDt BETWEEN 
DATEADD(hour,17,cast(Cast(@date as date) as datetime)) 
and DATEADD(hour,31,cast(Cast(@date as date) as datetime)) 
関連する問題