私はSQLServerの初心者です。クエリで次のロジックを書くのを手伝ってください。
If getnow() > today 4 PM
Then
SELECT *
FROM table
WHERE MailDate is Tomorrow
Else
SELECT *
FROM table
WHERE MailDate is Today
私はSQLServerの初心者です。クエリで次のロジックを書くのを手伝ってください。
If getnow() > today 4 PM
Then
SELECT *
FROM table
WHERE MailDate is Tomorrow
Else
SELECT *
FROM table
WHERE MailDate is Today
select *
from table
where DATEDIFF(day, GETDATE(), maildate) = case when
DATEPART(hour, GETDATE()) >= 16 then 1 else 0
end
IF datepart(hh, getdate()) >= 16
BEGIN
SELECT *
FROM table
WHERE DateDiff(day, getdate(), MailDate) = 1
END
ELSE
BEGIN
SELECT *
FROM table
WHERE DateDiff(day, getdate(), MailDate) = 0
END
ここでの考え方は、含意書き換えルールを使用することです。
IF ( x ) THEN ( y ) is equivalent to ( NOT ( x ) OR y )
あなたの場合
IF ( DATEPART(HOUR, CURRENT_TIMESTAMP) >= 16 )
THEN ( DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 1 )
と同等です
( NOT ( DATEPART(HOUR, CURRENT_TIMESTAMP) >= 16 )
OR ( DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 1 ) )
それ自体はと同等です
( ( DATEPART(HOUR, CURRENT_TIMESTAMP) < 16 )
OR ( DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 1 ) )
元のELSE
句をIF..THEN
それ自体でステートメントとして書き直します。
IF ( DATEPART(HOUR, CURRENT_TIMESTAMP) < 16 )
THEN ( DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 0 )
と同等です(今回は中間ステップを省略します)
( ( DATEPART(HOUR, CURRENT_TIMESTAMP) >= 16 )
OR ( DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 0 ) )
次に、2つの式は、連言標準形( "一連のAND
s)で記述できます。
SELECT *
FROM the_table
WHERE ( ( DATEPART(HOUR, CURRENT_TIMESTAMP) < 16 )
OR ( DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 1 ) )
AND
( ( (DATEPART(HOUR, CURRENT_TIMESTAMP) >= 16
OR ( DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 0 ) ) ;
正確なMS-syntax-dialectはわかりませんが、IFまたはCASE構造が必要ないことを証明しようと思います。例として@mellamokbの返信を取り上げました。
SELECT *
FROM the_table
WHERE ( DATEPART(hour, GETDATE()) >= 16
AND DATEDIFF(day, GETDATE(), MailDate) = 1)
OR (DATEPART(hour, GETDATE()) < 16
AND DATEDIFF(day, GETDATE(), MailDate) = 0)
;
mytableからa.name、if(a.is_active ='t'、'Active'、'Inactive')を選択します。
SQLでこれを行うには、ストアドプロシージャが必要です。こちらのドキュメントをご覧くださいhttp://msdn.microsoft.com/en-us/library/aa174792(v=sql.80).aspx
IF ( DATEDIFF(h, GETDATE(), DATEADD(h,4,GETDATE()))>0 )
SELECT *
FROM table
WHERE MailDate is Tomorrow
ELSE
SELECT *
FROM table
WHERE MailDate is Today
これはMSSQLです。それ以上のことをしたい場合は、BEGIN....ENDを実行する場合に1つのコマンド/選択を実行します。
IF DATEPART(HOUR, GETDATE()) > 16
BEGIN
-- SELECT statement
END
ELSE
BEGIN
-- SELECT statement
END
ストアドプロシージャに含まれている必要はありません。