如何从sql中的字符串中获取月份?

时间:2010-09-15 21:17:35

标签: sql sql-server tsql sql-server-2008

我必须从一个以格式存储字符串的列中获取月份 -

Column
----------
`Feb2007'     
'Sep2008'

因此,如果值为'Feb2007',那么我需要返回2,否则如果值为'Sep2009',那么我应该返回9

SQL Server 2008中是否有内置函数来实现这样的功能?

7 个答案:

答案 0 :(得分:9)

试试这个:

select datepart(mm, cast('feb2008' as datetime))

答案 1 :(得分:3)

也是这样:

SELECT MONTH(CAST(date_col AS datetime))

答案 2 :(得分:1)

如果没有别的,您可以创建一个包含月份名称和数值的表格。

如果服务器功能始终正确识别您的月份名称,那么您就是好的,但如果手动输入任何数据,可能会出现拼写错误或其他不一致的情况,并且表格可以让您支持它们。

答案 3 :(得分:0)

我衷心地同意贝丝的观点 - 但是有理由说明为什么要这样做而不是作为最后的手段:

数据应以其原生格式存储。您不应该将它存储为字符串而不是8位整数。它同样有意义。 SQL是一个非常聪明的野兽,但是如果你搞砸了你的基本数据类型,它的大多数有用的功能和启发式都会失控 - 甚至是基本的东西,比如索引排序 。更不用说你的数据变成了SQL Server显式(即依赖于某些SQL行为),而不是泛型,降低了可移植性。

用更正式的术语来说:你迫使它成为数据层的信息。这与所有已知的数据处理规则相反。

答案 4 :(得分:0)

SELECT month(column);

这应该可行,但是我已经使用过SQL Server了一段时间了。

答案 5 :(得分:0)

    datepart(month,_datetime)

其中_datetime是列。你也可以用

    datepart(month,getdate())

获取当月

答案 6 :(得分:0)

如果可能的话,可能需要重新访问您的数据库设计。在存储到表中之前将其转换为日期时间更有效。例如,查找一系列日期所需的时间会比需要的时间长得多,因为在查找范围内的日期之前,您必须先铸造每个不同的值。