私は与えられた日付から金曜日、土曜日、日曜日、月曜日などのような日の名前を取得しようとしています。たとえば、曜日の名前を返す組み込み関数があることを私は知っています。
SELECT DATENAME(dw,'09/23/2013') as theDayName
このSQLクエリは以下を返します。
'月曜日'
これで大丈夫です。しかし、私はMonth, Day and Year
を個別に渡したいと思います。
日付から月、日、年を取得するために組み込みのDATEPART関数を使用しているので、DATENAME関数に渡すことができます。
SELECT DATEPART(m, GETDATE()) as theMonth -- returns 11
SELECT DATEPART(d, GETDATE()) as theDay -- returns 20
SELECT DATEPART(yy, GETDATE()) as theYear -- returns 2013
月、日、年の値を個別に取得したので、それをDATENAME
に渡して、必要な日付のWeekname
を取得します。
--my SQL query to return dayName
SELECT (DATENAME(dw, DATEPART(m, GETDATE())/DATEPART(d, myDateCol1)/ DATEPART(yy, getdate()))) as myNameOfDay, FirstName, LastName FROM myTable
これは誤った曜日名を返します。 DATENAME関数でSQLクエリが次のようになるように、/を - に置き換えてみました。
SELECT DATENAME(dw,'09/23/2013')
--becomes
SELECT DATENAME(dw,'09-23-2013')
しかし、それはまだ私のSQLクエリから不正確なdayNameを返します。私はここで何かが足りない。
お知らせ下さい。
日付文字列を作成する必要があります。 DATEPARTの数値の戻り値に対してMATH /数値演算を行う/
または-
演算子を使用しています。それからDATENAME
はその数値を取り、それを日付として解釈します。
あなたはそれを文字列に変換する必要があります。例えば:
SELECT (
DATENAME(dw,
CAST(DATEPART(m, GETDATE()) AS VARCHAR)
+ '/'
+ CAST(DATEPART(d, myDateCol1) AS VARCHAR)
+ '/'
+ CAST(DATEPART(yy, getdate()) AS VARCHAR))
)
SQL 2005および2008でテストおよび動作しています。これが2012年以降に動作するかどうかは不明です。
ソリューションはDATEPARTの代わりにDATENAMEを使用します
select datename(dw,getdate()) --Thursday
select datepart(dw,getdate()) --2
SQL Server 2012をお持ちの場合
日付部分が整数の場合は、 DATEFROMPARTS
関数を使用できます。
SELECT DATENAME( dw, DATEFROMPARTS( @Year, @Month, @Day ) )
日付部分が文字列の場合は、 CONCAT
関数を使用できます。
SELECT DATENAME( dw, CONVERT( date, CONCAT( @Day, '/' , @Month, '/', @Year ), 103 ) )
次のように試してください。DATENAME(DW、GETDATE())を選択してください
SELECT DATENAME(DW,CONVERT(VARCHAR(20),GETDATE(),101))