如何从sql server中的字符串中获取日期部分

时间:2015-03-10 10:34:50

标签: sql sql-server tsql date datepart

' UNK-JAN-2015' 这是我的日期值。 UNK引用未知值。 现在我需要从那个月开始。 有没有办法找到它......

5 个答案:

答案 0 :(得分:3)

SELECT 
RIGHT(DateString, 4) [Year], 
LEFT(RIGHT(DateString, 8), 3) [Month] 
FROM YourTable

答案 1 :(得分:1)

使用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];

答案 2 :(得分:0)

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

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)) 

答案 3 :(得分:0)

<强>查询

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 :(得分:0)

要获取实际月份值,而不是简单地使用构成字符串月份部分的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是一些前缀)