使用SQL Server从字符串中提取字符



我有一列包含以下数据:

September 12, 2022    
September 15, 2022
December 12, 2022
January 31, 2023

这就是我需要的字符串:

September 2022
September 2022
December 2022
January 2023

我只需要那些已经存在的字符串值的月份和年份。如何使用sql server提取此信息?

请帮我想出一个解决方案。

我试着用修剪器,但没有按预期工作。

实际上,解决方案是不将日期存储为字符串;使用正确的数据类型意味着您可以获得自动验证(避免February 29, 6666who 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

最新更新