我有一列包含以下数据:
September 12, 2022
September 15, 2022
December 12, 2022
January 31, 2023
这就是我需要的字符串:
September 2022
September 2022
December 2022
January 2023
我只需要那些已经存在的字符串值的月份和年份。如何使用sql server提取此信息?
请帮我想出一个解决方案。
我试着用修剪器,但没有按预期工作。
实际上,解决方案是不将日期存储为字符串;使用正确的数据类型意味着您可以获得自动验证(避免February 29, 6666
和who knows what else
(,并且可以获得内置的日期/时间功能(例如仅提取月份名称和年份(,而无需在列不可避免地被垃圾污染时转换或决定如何处理无效(或try_convert后为null(输出。
但是,如果你被你所困扰的东西所困扰,只要你使用的是英语,你就应该能够使用风格为107:的convert
SELECT CONCAT(DATENAME(MONTH, x), ' ', YEAR(x))
FROM
(
SELECT TRY_CONVERT(date, 'September 12, 2022', 107)
) AS x(x);
所以,如果你有一张桌子:
SELECT CONCAT(DATENAME(MONTH, x), ' ', YEAR(x))
FROM
(
SELECT TRY_CONVERT(date, BadColumnDataType, 107)
FROM dbo.YourTableName
) AS x(x);
您可能希望您的代码明确表示:
SET LANGUAGE us_english;
这把小提琴上的榜样。这里有一个例子,说明它在其他语言中是如何工作的。
如果您的列使用日期数据类型,则可以使用以下查询:
SELECT FORMAT(<Your Column Name>, 'MMMM yyyy');
但是,如果使用varchar或nvarchar数据类型,则可以将此查询稍微更改为:
SELECT FORMAT(CAST(<Your Column Name> AS date), 'MMMM yyyy');
FORMAT仅适用于SQL Server 2012或更高版本
更多信息:https://learn.microsoft.com/en-us/sql/t-sql/functions/format-transact-sql?view=sql-server-ver16