代码之家  ›  专栏  ›  技术社区  ›  Vishal

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

  •  6
  • Vishal  · 技术社区  · 14 年前

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

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

    所以如果价值是 'Feb2007' 那我得回去了 2 或者如果值是 'Sep2009' 那我该回去了 9 .

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

    7 回复  |  直到 14 年前
        1
  •  9
  •   Denis Valeev    14 年前

    试试这个:

    select datepart(mm, cast('feb2008' as datetime))
    
        2
  •  3
  •   Jeff Ogata    14 年前

    此外:

    选择月份(强制转换(日期列为日期时间)

        3
  •  1
  •   Beth    14 年前

    如果没有其他内容,您可以使用月份名称和数值创建一个表。

    如果服务器函数总是正确地识别您的月份名称,那么您就可以了,但是如果手动输入了这些数据中的任何一个,则可能会出现拼写错误或其他不一致,并且表允许您支持这些数据。

        4
  •  0
  •   Rushyo    14 年前

    我衷心同意贝丝的看法,但有理由解释为什么要这样做,而不是作为最后的手段:

    数据应以其本机格式存储。不应将其存储为字符串,而应将其存储为8位整数。它的意义不言而喻。SQL是一种非常智能的野兽,但是如果你把基本数据类型搞砸了,它的大部分有用功能和启发式方法都会消失在窗口之外——甚至像 标引 分选 . 更不用说,您的数据变成了SQL Server显式的(即依赖于某些SQL行为),而不是通用的,从而降低了可移植性。

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

        5
  •  0
  •   vol7ron    14 年前
    SELECT month(column);
    

    这应该可以工作,但我已经有一段时间没有使用过SQL Server了。

        6
  •  0
  •   Nipuna    14 年前
        datepart(month,_datetime)
    

    其中_datetime是列。您也可以使用

        datepart(month,getdate())
    

    获取当前月份

        7
  •  0
  •   harvest316    14 年前

    如果可能的话,可能需要重新访问数据库设计。在存储到表中之前,将其转换为datetime要高效得多。例如,查找日期范围所需的时间比需要的时间要长得多,因为在查找范围中的日期之前,必须对每个不同的值进行强制转换。