从字符串中分割日期

时间:2015-10-15 11:26:36

标签: sql

我有一个列,其中包含文本值以及以空格分隔的日期。

字符串就像

Application and Removal 2014-11-13 20:46

我想将日期值2014-11-13 20:46Application and Removal分隔为字符串字符中的两列。

目前我所做的是

CASE WHEN ISDATE(RIGHT(FORMNM,16)) = 1 THEN LEFT(FORMNM, LEN(FORMNM) - 17) ELSE FORMNM END as FORMNM,
    FORMSTAT,
    CASE
        WHEN ISDATE(RIGHT(FORMNM,16)) = 1 THEN RIGHT(FORMNM, 16)
    END AS FormDate

我知道这不是真正的方法。还有其他办法吗?

2 个答案:

答案 0 :(得分:1)

SQL-Server 中如果字符串端是静态的 - 总是= Application and Removal,您可以使用REPLACE执行以下操作:

DECLARE @str NVARCHAR(MAX) = 'Application and Removal 2014-11-13 20:46'

SELECT REPLACE(@str, 'Application and Removal', '') AS [Date],
       'Application and Removal' AS [Other Column]

或者,如果字符串是动态的,您可以使用PATINDEX

以更复杂的方式制作字符串
DECLARE @str NVARCHAR(MAX) = 'Application and Removal 2014-11-13 20:46'

SELECT LEFT(@str, PATINDEX('%[0-9]%', @str) - 1) AS column1,
       RIGHT(@str, LEN(@str) - PATINDEX('%[0-9]%', @str) + 1) AS column2

<强>输出

column1                     column2
Application and Removal     2014-11-13 20:46

答案 1 :(得分:0)

假设日期/时间的常数 yyyy-mm-dd hh:mi 格式,这里是样本,注意它们有多不同,这就是为什么你总是告诉我们dbms是什么< / p>

T-SQL(MS SQL / Sybase)

RIGHT([that_string_column],16)

的Oracle

SUBSTR(that_string_column, -16, 16)