web-dev-qa-db-ja.com

SQL Serverの特定の日付けから曜日名を取得する

私は与えられた日付から金曜日、土曜日、日曜日、月曜日などのような日の名前を取得しようとしています。たとえば、曜日の名前を返す組み込み関数があることを私は知っています。

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を返します。私はここで何かが足りない。

お知らせ下さい。

53
theITvideos

日付文字列を作成する必要があります。 DATEPARTの数値の戻り値に対してMATH /数値演算を行う/または-演算子を使用しています。それからDATENAMEはその数値を取り、それを日付として解釈します。

あなたはそれを文字列に変換する必要があります。例えば:

SELECT (
  DATENAME(dw, 
  CAST(DATEPART(m, GETDATE()) AS VARCHAR) 
  + '/' 
  + CAST(DATEPART(d, myDateCol1) AS VARCHAR) 
  + '/' 
  + CAST(DATEPART(yy, getdate()) AS VARCHAR))
  )
42
Eli Gassert

SQL 2005および2008でテストおよび動作しています。これが2012年以降に動作するかどうかは不明です。

ソリューションはDATEPARTの代わりにDATENAMEを使用します

select datename(dw,getdate()) --Thursday
select datepart(dw,getdate()) --2
68
Irfan Raza

SQL Server 2012をお持ちの場合

日付部分が整数の場合は、 DATEFROMPARTS 関数を使用できます。

SELECT DATENAME( dw, DATEFROMPARTS( @Year, @Month, @Day ) )

日付部分が文字列の場合は、 CONCAT 関数を使用できます。

SELECT DATENAME( dw, CONVERT( date, CONCAT( @Day, '/' , @Month, '/', @Year ), 103 ) )
6

次のように試してください。DATENAME(DW、GETDATE())を選択してください

3
Author PraWin
SELECT DATENAME(DW,CONVERT(VARCHAR(20),GETDATE(),101))