【问题标题】:How to get a date part from a string in sql server如何从sql server中的字符串中获取日期部分
【发布时间】:2015-03-10 10:34:49
【问题描述】:

'UNK-JAN-2015' 这是我的日期值。 UNK 是指未知值。 现在我只需要一个月。 有没有办法找到它......

【问题讨论】:

  • 您实际上是将日期存储为字符串?
  • 是日期时间栏吗?
  • 您将日期存储为字符串,因此您可以使用Rightmsdn.microsoft.com/en-us/library/ms177532.aspx 我会建议你为数据使用正确的数据类型。
  • 如果我只想得到一个月........?
  • 当需求被冻结时开发更容易;)

标签: sql sql-server tsql date datepart


【解决方案1】:
SELECT 
RIGHT(DateString, 4) [Year], 
LEFT(RIGHT(DateString, 8), 3) [Month] 
FROM YourTable

【讨论】:

    【解决方案2】:

    使用SUBSTRING

    查询

    SELECT SUBSTRING('UNK-JAN-2015',LEN('UNK-JAN-2015')-3,4);
    

    使用RIGHT

    查询

    SELECT RIGHT('UNK-JAN-2015', 4);
    

    从给定的字符串中获取月份,

    查询

    SELECT SUBSTRING('UNK-JAN-2015',5,3) AS [Month];
    

    【讨论】:

    • 请查看对帖子的编辑并相应更新,因为 OP 现在正在请求月份
    【解决方案3】:

    查询

    declare @text varchar(100)
    set @text='UNK-JAN-2015'
    
    set @text= '<r>'+ REPLACE(@text,'-','</r><r>') + '</r>'
    
    select i.value('r[2]','varchar(10)') AS Year 
    from (select cast(@text as xml) xml)out CROSS APPLY out.xml.nodes('/') x(i) 
    

    【讨论】:

      【解决方案4】:

      如果您想查找由- 分隔的最后一个标记,您可以使用:

      SELECT DT = REVERSE(SUBSTRING(REVERSE(@DateString),0,CHARINDEX('-',REVERSE(@DateString)))) 
      

      这也返回 2015,所以最后一个破折号后面的文本。所以它不仅返回最后 4 个字符。使用UNK-JAN-2015/02/09,它返回2015/02/09

      编辑:如果你想要中间部分,月份,你可以使用:

      SELECT SUBSTRING(@DateString, CHARINDEX('-',@DateString)+1,LEN(@DateString)-CHARINDEX('-',@DateString,CHARINDEX('-',@DateString))-(CHARINDEX('-',@DateString)+1)) 
      

      【讨论】:

      • 感谢您的回答。如何仅获取月份值?
      • @Jasper:我已经编辑了我的答案。也许有一个更简单的方法,但它是有效的并且是完全动态的,所以只寻找-
      【解决方案5】:

      要获得实际的月份值,而不是简单地获取构成字符串月份部分的 3 个字符,您可以使用一些字符串操作将其转换为日期并从中提取月份:

      DECLARE @val NVARCHAR(15) = 'UNK-JAN-2015'
      
      SELECT  CONVERT(DATETIME, RIGHT(@val, 4) + '-' + SUBSTRING(@val, 5, 3)) AS TheDate,
          MONTH(CONVERT(DATETIME, RIGHT(@val, 4) + '-' + SUBSTRING(@val, 5, 3))) MonthNumber,
          DATENAME(MONTH,
                 CONVERT(DATETIME, RIGHT(@val, 4) + '-' + SUBSTRING(@val, 5, 3))) [MonthName]
      

      输出:

      TheDate                   MonthNumber   MonthName
      2015-01-01 00:00:00.000   1             January
      

      这假定该值始终采用相同的格式:XXX-MMM-YYYY(其中 XXX 是某个前缀)

      【讨论】:

        猜你喜欢
        • 2015-12-31
        • 1970-01-01
        • 2022-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-12
        • 1970-01-01
        • 2018-04-27
        相关资源
        最近更新 更多