我必须从一个以格式存储字符串的列中获取月份 -
Column
----------
`Feb2007'
'Sep2008'
因此,如果值为'Feb2007'
,那么我需要返回2
,否则如果值为'Sep2009'
,那么我应该返回9
。
SQL Server 2008中是否有内置函数来实现这样的功能?
答案 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)
如果可能的话,可能需要重新访问您的数据库设计。在存储到表中之前将其转换为日期时间更有效。例如,查找一系列日期所需的时间会比需要的时间长得多,因为在查找范围内的日期之前,您必须先铸造每个不同的值。