適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 資料庫
此函式會傳回字元字串,代表指定之 date 的指定 datepart。
如需所有 Transact-SQL 日期和時間資料類型與函式的概觀,請參閱日期和時間資料類型與函式 (Transact-SQL)。
語法
DATENAME ( datepart , date )
引數
datepart
會傳回之 DATENAME 引數的特定部分。 此表格會列出所有有效的 datepart 引數。
注意
DATENAME 不會接受 datepart 引數的使用者定義變數對等項目。
| datepart | 縮寫 |
|---|---|
| year | yy,yyyy |
| quarter | qq,q |
| month | 毫米、米 |
| dayofyear | dy、y |
| day | dd、d |
| week | 週,週 |
| weekday | DW,W |
| hour | hh |
| minute | 米,N |
| second | SS、S |
| millisecond | ms |
| microsecond | mcs |
| nanosecond | ns |
| TZoffset | tz |
| ISO_WEEK | 伊索克,伊索爾 |
date
可解析成下列其中一個資料類型的運算式:
- date
- datetime
- datetimeoffset
- datetime2
- smalldatetime
- time
針對 date,DATENAME 會接受資料行運算式、運算式、字串常值或使用者定義變數。 請使用四位數年份以避免模糊不清的問題。 如需兩位數年份的資訊,請參閱設定兩位數年份的截止伺服器設定選項。
傳回類型
nvarchar
傳回值
- 每個 datepart 及其縮寫都會傳回相同的值。
傳回值會取決於使用 SET LANGUAGE 及登入的設定 default language 伺服器設定選項而設定的語言環境,而有所不同。 如果 date 是某些格式的字串常值,傳回值就會取決於 SET DATEFORMAT。 當 date 是日期或時間資料類型的資料行運算式時,SET DATEFORMAT 並不會變更傳回值。
當 date 參數具有 date 資料類型引數時,傳回值就會根據 SET DATEFIRST 所指定的設定而不同。
TZoffset datepart 引數
如果 datepart 引數是 TZoffset (tz) 而且 date 引數沒有時區位移時,DATEADD 就會傳回 0。
smalldatetime date 引數
當 date 是 smalldatetime 時,DATENAME 會以 00 形式傳回秒數。
針對不在 date 引數中的 datepart 所傳回的預設值
如果 date 引數的資料類型沒有指定的 datepart,只有在 DATENAME 引數具有常值時, 才會傳回該 datepart 的預設值。
例如,任何 date 資料類型的預設年-月-日都是 1900-01-01。 此陳述式具有 datepart 的日期部分引數、date 的時間引數,而且 DATENAME 會傳回 1900, January, 1, 1, Monday。
SELECT DATENAME(year, '12:10:30.123')
,DATENAME(month, '12:10:30.123')
,DATENAME(day, '12:10:30.123')
,DATENAME(dayofyear, '12:10:30.123')
,DATENAME(weekday, '12:10:30.123');
如果 date 指定為變數或資料表資料行,而該變數或資料行的資料類型沒有指定的 datepart,DATENAME 會傳回錯誤 9810。 在此範例中,變數 @t 具有 time 資料類型。 此範例會失敗,因為 DATEPART year 對 time 資料類型無效:
DECLARE @t time = '12:10:30.123';
SELECT DATENAME(year, @t);
備註
在下列子句中使用 DATENAME:
- GROUP BY(分組)
- HAVING
- 排序依據
- SELECT <名單>
- WHERE
在 SQL Server 中,DATENAME 會隱含地將字串常值轉換為 datetime2 類型。 換句話說,將日期當作字串傳遞時,DATENAME 不支援 YDM 格式。 您必須明確地將字串轉換為 datetime 或 smalldatetime 類型,才能使用 YDM 格式。
範例
此範例會針對指定的日期傳回日期部分。 請將資料表中的 datepart 值取代為 SELECT 陳述式中的 datepart 引數:
SELECT DATENAME(datepart,'2007-10-30 12:15:32.1234567 +05:10');
結果集如下所示。
| datepart | 傳回值 |
|---|---|
| year、yyyy、yy | 2007 |
| quarter、qq、q | 4 |
| month、mm、m | 10 月 |
| dayofyear、dy、y | 303 |
| day、dd、d | 30 |
| week、wk、ww | 44 |
| weekday、dw | Tuesday |
| hour、hh | 12 |
| minute、n | 15 |
| second、ss、s | 32 |
| millisecond、ms | 123 |
| microsecond、mcs | 123456 |
| nanosecond、ns | 123456700 |
| TZoffset、tz | +05:10 |
| ISO_WEEK、ISOWK、ISOWW | 44 |
Azure Synapse Analytics 和 Analytics Platform System (PDW)
此範例會針對指定的日期傳回日期部分。 請將資料表中的 datepart 值取代為 SELECT 陳述式中的 datepart 引數:
SELECT DATENAME(datepart,'2007-10-30 12:15:32.1234567 +05:10');
結果集如下所示。
| datepart | 傳回值 |
|---|---|
| year、yyyy、yy | 2007 |
| quarter、qq、q | 4 |
| month、mm、m | 10 月 |
| dayofyear、dy、y | 303 |
| day、dd、d | 30 |
| week、wk、ww | 44 |
| weekday、dw | Tuesday |
| hour、hh | 12 |
| minute、n | 15 |
| second、ss、s | 32 |
| millisecond、ms | 123 |
| microsecond、mcs | 123456 |
| nanosecond、ns | 123456700 |
| TZoffset、tz | +05:10 |
| ISO_WEEK、ISOWK、ISOWW | 44 |