|
v7: T-SQL: Преобразовать nvarchar в datetime | ☑ | ||
---|---|---|---|---|
0
1Сергей
19.08.15
✎
06:12
|
Cast('20150815' AS DateTime)
Преобразует в дату-время 2015-08-15 00:00:00.000 Какую строку передать, чтобы можно было получить ещё и время? Типа, 2015-08-15 10:12:59.000 |
|||
1
1Сергей
19.08.15
✎
06:18
|
Cast('2015-08-15 10:12:59.000' AS DateTime)
так работает, но неужели нельзя красивее? |
|||
2
spock
19.08.15
✎
06:21
|
{ts '2015-08-19 09:21:00 '}
|
|||
3
spock
19.08.15
✎
06:21
|
||||
4
1Сергей
19.08.15
✎
06:23
|
(2) спасибо, работает
никогда не видел такую конструкцию. По сути тот же CAST же? |
|||
5
spock
19.08.15
✎
06:25
|
(4) да, но гарантирует независимость от SET DATEFORMAT <мойформат> и настроек sql-сервера.
Пояснять нужно? |
|||
6
1Сергей
19.08.15
✎
06:42
|
(5) не нужно
|
|||
7
ЧеловекДуши
19.08.15
✎
07:26
|
||||
8
1Сергей
19.08.15
✎
07:28
|
(7) ты думаешь я это не читал, да?
|
|||
9
ЧеловекДуши
19.08.15
✎
07:36
|
(8) Я думаю, что Строка, должна быть в определенном формате, что бы преобразовать к типу Дата.
|
|||
10
ЧеловекДуши
19.08.15
✎
07:38
|
+(8) И да, если ты читал, то видимо не до конца, там все дело в коде "Стили даты и времени". Какой код, в таком формате должна быть и строка.
На SQL отладчике, можно поиграться и придти к правильному формату :) Вопрос только, а в каком у вас формате, сама строка? Типо "10.10.2015 00:00:00" ? Тогда у вас проблема, сиквел такое не поймет :) |
|||
11
1Сергей
19.08.15
✎
07:44
|
(10) "20151010" понимает же. И я спросил, как туда вставить ещё дату. Ответ: никак. Использовать другой формат строки
|
|||
12
1Сергей
19.08.15
✎
07:44
|
(11) *вставить ещё время
|
|||
13
ЧеловекДуши
19.08.15
✎
07:48
|
(11) Время T10:10:10 нет?
|
|||
14
ЧеловекДуши
19.08.15
✎
07:49
|
+(13) Если значение миллисекунд (ммм) равно 0, оно не не отображается. Например, значение «2012-11-07T18:26:20.000» будет отображено как «2012-11-07T18:26:20».
|
|||
15
ЧеловекДуши
19.08.15
✎
07:50
|
Там в табличках, присмотрись :)
|
|||
16
1Сергей
19.08.15
✎
07:56
|
(13) "20151010Т10:10:10" не работает
|
|||
17
ЧеловекДуши
19.08.15
✎
08:01
|
А можно показать сам подзапрос конвертации?
|
|||
18
1Сергей
19.08.15
✎
08:05
|
(17) запрос делаю из 1с77
КомандаАДО.CommandText = " |SELECT [CreationDate] CreationDate | ,[ModificationDate] ModificationDate | ,[ItemId] ItemId | ,[Name] Name | ,[AltSku] AltSku | ,[PackKey] PackKey | ,[status] status | ,[error] error | ,ISNULL([Name_Eng], '') Name_Eng |FROM [Bufer].[dbo].[ExpItemToWMS_AL] |WHERE [ModificationDate] >= " + ДатаSQL(НачДата) + " | AND [ModificationDate] <= " + ДатаSQL(КонДата, 1) + " |"; Сама функция преобразования выглядит так Функция ДатаSQL(ТекДата, КонецДня = 0) СтрокаШаблона = "{ts '" + "[ДатаГод(ТекДата)]-" + "[Формат(ДатаМесяц(ТекДата), ""Ч(0)2.0"")]-" + "[Формат(ДатаЧисло(ТекДата), ""Ч(0)2.0"")] "; Если КонецДня = 1 Тогда СтрокаШаблона = СтрокаШаблона + "23:59:59.997"; Иначе СтрокаШаблона = СтрокаШаблона + "00:00:00.000"; КонецЕсли; СтрокаШаблона = СтрокаШаблона + "'}"; Возврат Шаблон(СтрокаШаблона); КонецФункции |
|||
19
ЧеловекДуши
19.08.15
✎
08:06
|
||||
20
1Сергей
19.08.15
✎
08:07
|
(19) ну, как я и говорил, в формате ГГГГММДД не получится
|
|||
21
ЧеловекДуши
19.08.15
✎
08:10
|
(20) Как то формат ГГГГММДД не содержит времени :)
...ты меня запутал... Народ сводится к коду: SELECT CONVERT(datetime, STUFF(STUFF('200411010006', 9, 0, ' '), 12, 0, ':'), 101) |
|||
22
ЧеловекДуши
19.08.15
✎
08:11
|
STUFF - Функция STUFF вставляет одну строку в другую. Она удаляет указанное количество символов первой строки в начальной позиции и вставляет на их место вторую строку.
https://msdn.microsoft.com/ru-ru/library/ms188043(v=SQL.120).aspx |
|||
23
ЧеловекДуши
19.08.15
✎
08:12
|
А вообще должно работать вида "ГГГГ-ММ-ДДTЧЧ:мм:сс"
|
|||
24
1Сергей
19.08.15
✎
08:15
|
(22) как писал spock, лучше использовать конструкцию {ts '2015-08-19 09:21:00 '}, потому что нет привязки к локализации.
Как я уже и реализовал в (18) (23) так работает, только добавь пробел между датой и временем. Суть моего негодования проста: Чтобы преобразовать простую строку из цифр (20151010) в дату, достаточно одной функции. А преобразовать простой набор цифр (без всяких двоеточий, тире и прочего) в лоб не получится. Нужны танцы с бубном |
|||
25
1Сергей
19.08.15
✎
08:16
|
*А преобразовать простой набор цифр (без всяких двоеточий, тире и прочего) в ДатаВремя в лоб не получится. Нужны танцы с бубном
|
|||
26
ЧеловекДуши
19.08.15
✎
08:42
|
Есть такое :)
|
|||
27
spock
19.08.15
✎
08:45
|
а проблема еще не решилась что ли? :)
|
|||
28
ЧеловекДуши
19.08.15
✎
08:48
|
(27) Чет мне подсказывает, что решилось. Просто остался осадок, что Время не воспринимается, как должное :)
... Вот пройдет еще "немного" (или Много) времени, и в дату будут помещать и часовой пояс и положение в солнечной системе :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |