2013-11-22 1 views

ответ

1

Это выражение должно работать:

CASE WHEN [Hour] = 0 THEN '12:00am' 
    WHEN [Hour] < 12 THEN CAST([Hour] AS VarChar) + ':00am' 
    WHEN [Hour] = 12 THEN '12:00pm' 
    ELSE CAST(([Hour]-12) AS VarChar) + ':00pm' 
END AS [Time] 
0

С SQL это всегда собирается быть «трудный путь». Вот один вариант (при условии, столбец с номером называется num):

SELECT CAST(num AS VARCHAR) + ':00' + 
    CASE WHEN NUM < 12 THEN 'AM' ELSE 'PM' END Time 

См live demo на SQLFiddle.

+3

CONCAT не существует в SQL Server 2008. –

+0

@aaron Я признаюсь, что я никогда не использовал SQL Server - это правильно сейчас? – Bohemian

+0

Нет, это приведет к недействительной операции (вы не можете добавить целое число и строку). Вы можете попробовать свои решения на http://sqlfiddle.com/, прежде чем публиковать их ... –

0

Действительно, действительно, действительно нужно форматировать это на клиенте. Это не совсем аккуратная работа для SQL Server, и я не понимаю цели ее выполнения в T-SQL.

DECLARE @t TABLE(i INT); 

INSERT @t(i) VALUES(0),(1),(2), ... ,(23); 

SELECT LOWER(RIGHT(CONVERT(CHAR(19),DATEADD(HOUR,i,0),0),7)) FROM @t ORDER BY i; 

Результаты:

12:00am 
1:00am 
2:00am 
... 
11:00pm 
+0

Полностью согласовано. Просто нужно быстрое решение :) – Ray

0

Возможно (возможно, слишком сложно):

SELECT Hour, 
     CASE WHEN Hour = 0 THEN '12:00AM' 
     ELSE CASE WHEN Hour = 12 THEN '12:00PM' 
     ELSE CASE WHEN Hour < 12 
      THEN CAST(Hour AS VARCHAR(7)) + ':00AM' 
      ELSE CAST(Hour - 12 AS VARCHAR(7)) + ':00PM' 
     END END END AS AM_PM 
FROM dbo.Time 

Demo

2

Вы можете добавить :00:00 к целому числу, и использовать CAST для удобст к.т. его time, как это:

SELECT CAST(CAST(int_val as VARCHAR(2))+':00:00' as time) 
FROM my_table 

Demo on sqlfiddle.

При обновлении до SQL Server 2012, вы могли бы использовать TIMEFROMPARTS функцию, чтобы сделать то же самое, без ненужных преобразований:

SELECT TIMEFROMPARTS(int_val, 0, 0, 0, 0) 
FROM my_table 
+0

Это все еще не совсем то, что им нужно; выходной сигнал, например, '13: 00: 00.0000000'. –

+0

@AaronBertrand Это дает OP значение типа «время», которое он может преобразовать в любое разумное представление по мере необходимости. – dasblinkenlight

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