-1

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

4

5 回答 5

3
SELECT 
RIGHT(DateString, 4) [Year], 
LEFT(RIGHT(DateString, 8), 3) [Month] 
FROM YourTable
于 2015-03-10T10:36:47.267 回答
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];
于 2015-03-10T10:40:53.090 回答
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)) 
于 2015-03-10T10:42:51.030 回答
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 是某个前缀)

于 2015-03-10T11:11:17.890 回答
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) 
于 2015-03-10T11:03:01.430 回答