2015-10-15 2 views
0

У меня есть столбец, который состоит из текстового значения вместе с датой, разделенной пробелом.Сплит дата из строки

Строка будет как

Application and Removal 2014-11-13 20:46 

Я хочу, чтобы отделить значение 2014-11-13 20:46 даты и Application 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

Какая СУБД вы используете? Postgres? Oracle? –

+0

- это всегда 'Формат ввода и удаления [Дата]' или возможны другие текстовые значения? – Marco

+0

Просьба поделиться кодом/запросом/независимо от того, что вы пытались достичь своей цели. Пожалуйста, прочитайте [ask] в [help], чтобы получить помощь, как улучшить свой вопрос. Запрос кода без каких-либо усилий для решения вашей проблемы - для сайта фрилансера, а не для сайта Q & A. – Pred

ответ

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

предполагающие постоянная гггг-мм-дд чч: ми формат даты/времени, здесь образцы, обратите внимание, как они отличаются, поэтому вы всегда говорят нам, что DBMS является

T -SQL (MS SQL/Sybase)

RIGHT([that_string_column],16) 

Oracle

SUBSTR(that_string_column, -16, 16)