我覺得這個問題在 SQL Server 面試中一直出現,但我不知道如何回答。網上找不到好的資源。
在 SQL Server 中,如何將 2019-01-01 或 2019-01-01 HH:MM:SS 轉換為 2019-01?
uj5u.com熱心網友回復:
在 MS SQL 中,如何將 2019-01-01 或 2019-01-01 HH:MM: SS 轉換為 2019-01同時將其保留為日期資料型別?[重點補充]
你不能。SQL Server 的date資料型別代表一個特定的日歷日,而不是一個月。2019-01 不是一天。
(當然,在將 轉換date為 SQL Server 的字串資料型別之一時,您可以只輸出年和月部分。)
uj5u.com熱心網友回復:
這是一個技巧問題。沒有所有三個值(日、月和年)的日期格式。這失敗了:
CREATE TABLE #fake_date (fake_date DATETIME)
INSERT #fake_date
SELECT FORMAT(GETDATE(), 'yyyy-MM')
SELECT * FROM #fake_date
DROP TABLE #fake_date
但是,您可以通過簡單地使用 FORMAT 函式將年月顯示為 varchar:
SELECT FORMAT(GETDATE(), 'yyyy-MM')
uj5u.com熱心網友回復:
正如許多人已經提到的,SQL Server 沒有“YYYY-MM”的內置資料型別。
雖然 SQL Server 的 XML/XQuery/XSD 確實有它:xs:gYearMonth
供參考:建構式(XQuery)
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, dateColumn DATE);
INSERT INTO @tbl (dateColumn) VALUES
('2019-01-01'),
('2019-12-31'),
(NULL);
-- DDL and sample data population, end
SELECT ID, dateColumn
, result = c.query('/r/text()').value('xs:gYearMonth(substring(.,1,7))', 'CHAR(7)')
FROM @tbl
CROSS APPLY (SELECT CAST('<r>' CAST(dateColumn AS CHAR(10)) '</r>' AS XML)) AS t(c);
輸出
---- ------------ ---------
| ID | dateColumn | result |
---- ------------ ---------
| 1 | 2019-01-01 | 2019-01 |
| 2 | 2019-12-31 | 2019-12 |
| 3 | NULL | NULL |
---- ------------ ---------
uj5u.com熱心網友回復:
嘗試
SELECT CONCAT(year(datefield), '-', month(datefield)) FROM YOURTABLE
uj5u.com熱心網友回復:
to_char(created_at::date, 'YYYY-MM')
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/451039.html
