2014-12-10 7 views

ответ

2

Один из вариантов для того, чтобы держать его в чистоте будет использовать функцию, как показано ниже:

CREATE FUNCTION CONVERT_DATETIME_STRING_TO_DATE (@StringDate NVARCHAR(14)) 
RETURNS DATETIME 
AS 
BEGIN 
DECLARE @RESULT DATETIME 

SELECT @RESULT = CONVERT(datetime, substring(@StringDate, 0, 9)) 
SELECT @RESULT = DATEADD(HOUR, CAST(SUBSTRING(@StringDate, 9, 2) AS INT), @RESULT) 
SELECT @RESULT = DATEADD(MINUTE, CAST(SUBSTRING(@StringDate, 11, 2) AS INT), @RESULT) 
SELECT @RESULT = DATEADD(SECOND, CAST(SUBSTRING(@StringDate, 13, 2) AS INT), @RESULT) 

RETURN (@RESULT) 
END 

Преобразование может быть сделано в одном SELECT заявлении, но я думаю, что лучше для разделения каждого шага добавления часов, минут, секунд, чтобы он стал более четким кодом и стал проще поддерживать.

Затем, просто вызовите функцию из таблицы, например:

SELECT CONVERT_DATETIME_STRING_TO_DATE(t_time) 
FROM myTable 

Update:

Если у вас есть доступ только сделать SELECT заявления, а затем использовать что-то вроде этого:

SELECT DATEADD(SECOND, CAST(SUBSTRING(t_time, 13, 2) AS INT), DATEADD(MINUTE, CAST(SUBSTRING(t_time, 11, 2) AS INT), DATEADD(HOUR, CAST(SUBSTRING(t_time, 9, 2) AS INT), CONVERT(DATETIME, substring(t_time, 0, 9))))) 
FROM TABLE 
+0

Приложение, которое я использую, запускает выбор для извлечения строк из таблицы. Поскольку дата указана в формате, указанном выше. Приложение потребовало один лайнер для преобразования varchar в метку времени для обработки строки. –

+0

@PottaPitot Итак? Вы все равно можете использовать эту функцию в регулярном выражении 'SELECT', как показано в моем примере о том, как вы можете вызвать функцию после ее создания. –

+0

Проблема в том, что я не могу создать функцию. Все, что у меня есть, - это привилегия выбора доступа, которая читается только из существующей таблицы, и один из этих столбцов содержит метку времени, представленную в вышеуказанном формате. –

1

Попробуйте это.

DECLARE @s AS VARCHAR(14) 
DECLARE @dt AS DATETIME 

SET @s = '20140314163955' 
SET @dt = CAST(SUBSTRING(@s, 1,8) as datetime) 

SELECT DATEADD(Second, 
       CAST(Substring(@s, 13,2) AS INT) , 
       DATEADD(minute, 
         CAST(Substring(@s, 11,2) AS INT) , 
         DATEADD(hour, 
           CAST(Substring(@s, 9,2) AS INT), 
           @dt))) AS [DateTime] 
+0

Приложение, которое я использую, запускает выбор для извлечения строк из таблицы. Поскольку дата указана в формате, указанном выше. Приложение потребовало один лайнер для преобразования varchar в метку времени для обработки строки. –

Смежные вопросы