Рейтинг:
10
Maciej Los
Пожалуйста, сначала прочтите мой комментарий.
Как правило, для преобразования данных из одного типа в другой, пожалуйста, используйте: Приведение и преобразование (Transact-SQL)[^]
[РЕДАКТИРОВАТЬ]
Ответьте на комментарий op. Нет, это недостаточная информация. Существует несколько версий MS SQL Server. Некоторые из них не предоставляют тип данных time.
DECLARE @t VARCHAR(30) = '1133'
SELECT LEFT(@t,2) + ':' + RIGHT(@t,2) + ' AM' AS MyTimeAsString
SELECT CONVERT(TIME, MyTimeAsString) AS MyTimeAsTime
FROM (
SELECT LEFT(@t,2) + ':' + RIGHT(@t,2) + ' AM' AS MyTimeAsString
) AS T
SELECT CONVERT(DATETIME, MyTimeAsString) AS MyTimeAsDateTime
FROM (
SELECT LEFT(@t,2) + ':' + RIGHT(@t,2) + ' AM' AS MyTimeAsString
) AS T
Результаты:
MyTimeAsString
11:33 AM
MyTimeAsTime
11:33:00.0000000
MyTimeAsDateTime
1900-01-01 11:33:00.000
Это то, чего ты хочешь?
[/РЕДАКТИРОВАТЬ]
[Править 2]
CREATE FUNCTION udf_FormatTime (@sTime VARCHAR(10))
RETURNS VARCHAR(15)
AS
BEGIN
DECLARE @sTimeFormat VARCHAR(15)
IF LEN(@sTime) = 0
SET @sTimeFormat = '00:00 AM'
ELSE
SET @sTimeFormat = LEFT(@sTime, 2) + ':' + RIGHT(@sTime, 2)
IF CONVERT(INT, LEFT(@sTimeFormat,2))<13
SET @sTimeFormat = @sTimeFormat + ' AM'
ELSE
SET @sTimeFormat = @sTimeFormat + ' PM'
RETURN @sTimeFormat
END
[/EDIT 2]
coded007
Мацей Лос я пытался это сделать, но не получилось. Я думаю, что нам нужно дать какой-то пользовательский код, чтобы преобразовать это
Maciej Los
Что не работает? Вы читали мой комментарий первым? Поскольку OP не предоставляет достаточной информации, мой ответ заключается в том, как конвертировать данные между типами данных.
VICK
Спасибо Мацей Лос... меня оправдали.. ну, я использую SQL Server 2008 Enterprise.
VICK
Хотя это не решило мою проблему.. как его просто добавление : между строкой и добавлением жестко закодированного AM в конце.. но все же это дает мне какой-то намек.
Maciej Los
Я предлагаю вам изменить тип данных на time или datetime, в зависимости от ваших потребностей ;)
Не могли бы вы, пожалуйста, отметить это решение как ответ (зеленая кнопка)?
VICK
Не Обижайся... Но
Ну, как я уже упоминал в своем комментарии выше, что делает ваше представленное решение, кроме той ссылки MSDN, которую я нашел на первой странице поиска google.
это не совсем то, что может помочь решить мою проблему. :(
Так что будем ждать другого решения.
VICK
ОШИБКА.... :(
Msg 137, Level 15, State 2, Procedure udf_FormatTime, Line 10
Must declare the scalar variable "@sPhone".
Msg 156, Level 15, State 1, Procedure udf_FormatTime, Line 12
Incorrect syntax near the keyword 'ELSE'.
VICK
после объявления @sPhone .. теперь получаю это.
Msg 2714, Level 16, State 3, Procedure udf_FormatTime, Line 15
There is already an object named 'udf_FormatTime' in the database.
Maciej Los
Проверь сейчас. Чтобы обновить функцию udf_FormatTime, вам нужно заменить CREATE word на ALTER ;)
VICK
Хм... верно ... пробовал, но хорошо, что это делает то же самое ... если я передам 1133 в качестве параметра этой функции после alter... он возвращает 11:33 утра.. в то время как если я передам 2244.. dn, он также вернет 22:44 утра с этим.
так что не работает как стандартный сценарий AM PM..
Maciej Los
Это была примерная функция. Вам нужно добавить дополнительные условия...
Пожалуйста, смотрите обновленный ответ.
VICK
ладно. Спасибо за сотрудничество.