Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Преобразование varchar -> datetime  [new]
Domninsky
Member

Откуда: Москва
Сообщений: 655
Народ подскадите плиз туплю.

В таблице есть столбец типа varchar(9) в нем лежит время в формате 'ЧЧММССммм'

Пытаюсь преобразовать в запросе это значение в datetime вот так:

convert(datetime,Time_Create_File,114)

Вываливается сообщение об ошибке
Ошибка преобразования datetime из символьной строки.

Как правильно?

Спасибо!
4 окт 07, 13:17    [4754649]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar -> datetime  [new]
Glory
Member

Откуда:
Сообщений: 104751
114 - это hh:mi:ss:mmm
4 окт 07, 13:19    [4754665]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar -> datetime  [new]
москит
Guest
declare @s varchar(20)
select @s = '102544668'
select convert(datetime, stuff(stuff(stuff(@s,7,0,'.'),5,0,':'), 3, 0, ':'), 109)
4 окт 07, 13:22    [4754690]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar -> datetime  [new]
москит
Guest
109 - лишнее
declare @s varchar(20)
select @s = '102544668'
select convert(datetime, stuff(stuff(stuff(@s,7,0,'.'),5,0,':'), 3, 0, ':'))
4 окт 07, 13:24    [4754712]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar -> datetime  [new]
Domninsky
Member

Откуда: Москва
Сообщений: 655
Спасибо!
4 окт 07, 13:53    [4754962]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Преобразование varchar -> datetime  [new]
Bulat2
Member

Откуда:
Сообщений: 57
insert into dbo.usr_cons (usr_file_date,
		  usr_file_time, usr_file_kind, info_cod_date, info_cod_time,
		  consult_tor_date, consult_tor_time, netCount, system,
		  vDistr, nDistr, nComp, directory, nCat, nTexts,
		  n3,n4,n5, n6, compliance, u1_date, u1_time, u1_sysdate,
		  u1_docs, u1_kind, u2_date, u2_time, u2_sysdate,
		  u2_docs, u2_kind, u3_date, u3_time, u3_sysdate,
		  u3_docs, u3_kind, u4_date, u4_time, u4_sysdate,
		  u4_docs, u4_kind, u5_date, u5_time, u5_sysdate,
		  u5_docs, u5_kind, u6_date, u6_time, u6_sysdate,
		  u6_docs, u6_kind, u7_date, u7_time, u7_sysdate,
		  u7_docs, u7_kind, u8_date, u8_time, u8_sysdate,
		  u8_docs, u8_kind, u9_date, u9_time, u9_sysdate,
		  u9_docs, u9_kind, u10_date, u10_time, u10_sysdate,
		  u10_docs, u10_kind, version, name_file) 

SELECT  		  
usr_file_date = convert(datetime,usr_file_date, 104),
		  usr_file_time = convert(datetime, REPLACE(usr_file_time, '.', ':'), 104), 
		  usr_file_kind, 
		  info_cod_date = convert(datetime,info_cod_date, 104), 
		  info_cod_time = convert(datetime, REPLACE(info_cod_time, '.', ':'), 104),
		  consult_tor_date = convert(datetime,consult_tor_date, 104),
		  consult_tor_time = convert(datetime, REPLACE(consult_tor_time,'.',':'), 104), 
		  netCount, system,
		  vDistr, nDistr, nComp, directory, nCat, nTexts,
		  n3,n4,n5, n6, compliance, 
		  u1_date = convert(datetime,u1_date, 104), 
		  u1_time = convert(datetime, REPLACE(u1_time,'.',':'), 104), 
		  u1_sysdate = convert(datetime,u1_sysdate, 104),
		  u1_docs, u1_kind, 
		  u2_date = convert(datetime,u2_date, 104), 
		  u2_time = convert(datetime, REPLACE(u2_time,'.',':'), 104), 
		  u2_sysdate = convert(datetime,u2_sysdate, 104),
		  u2_docs, u2_kind, 
		  u3_date = convert(datetime,u3_date, 104), 
		  u3_time = convert(datetime, REPLACE(u3_time,'.',':'), 104), 
		  u3_sysdate = convert(datetime,u3_sysdate, 104),
		  u3_docs, u3_kind, 
		  u4_date = convert(datetime,u4_date, 104), 
		  u4_time = convert(datetime, REPLACE(u4_time,'.',':'), 104), 
		  u4_sysdate = convert(datetime,u4_sysdate, 104),
		  u4_docs, u4_kind, 
		  u5_date = convert(datetime,u5_date, 104), 
		  u5_time = convert(datetime, REPLACE(u5_time,'.',':'), 104), 
		  u5_sysdate = convert(datetime,u5_sysdate, 104),
		  u5_docs, u5_kind, 
		  u6_date = convert(datetime,u6_date, 104), 
		  u6_time = convert(datetime, REPLACE(u6_time,'.',':'), 104), 
		  u6_sysdate = convert(datetime,u6_sysdate, 104),
		  u6_docs, u6_kind, 
		  u7_date = convert(datetime,u7_date, 104), 
		  u7_time = convert(datetime, REPLACE(u7_time,'.',':'), 104), 
		  u7_sysdate = convert(datetime,u7_sysdate, 104),
		  u7_docs, u7_kind, 
		  u8_date = convert(datetime,u8_date, 104), 
		  u8_time = convert(datetime, REPLACE(u8_time,'.',':'), 104), 
		  u8_sysdate = convert(datetime,u8_sysdate, 104),
		  u8_docs, u8_kind, 
		  u9_date = convert(datetime,u9_date, 104), 
		  u9_time = convert(datetime, REPLACE(u9_time,'.',':'), 104), 
		  u9_sysdate = convert(datetime,u9_sysdate, 104),
		  u9_docs, u2_kind, 
		  u10_date = convert(datetime,u10_date, 104), 
		  u10_time = convert(datetime, REPLACE(u10_time,'.',':'), 104), 
		  u10_sysdate = convert(datetime,u10_sysdate, 104),
		  u10_docs, u2_kind, 
		  version, @file_name
FROM 
	 OPENXML (@docHandle, '/user_info//updates', 2)
         WITH      (				usr_file_date varchar (20) '//USR_FILE/@date',
			usr_file_time varchar (20) '//USR_FILE/@time',
			usr_file_kind varchar (50) '//USR_FILE/@kind',
			info_cod_date varchar (20) '//info.cod/@date',
			info_cod_time varchar (20) '//info.cod/@time',
			consult_tor_date varchar (20) '//consult.tor/@date',
			consult_tor_time varchar (20) '//consult.tor/@time',

			netCount int '/user_info/package//@netCount',
			system int '@netCount',

			vDistr varchar (50) '..//@directory',
			nDistr varchar (50) '..//@nDistr',
			nComp int '..//@nComp',
			directory varchar (50) '..//@directory',
			nCat int '..//@nCat',
			nTexts int '..//@nTexts',
			n3 int '..//@n3',					
			n4 int '..//@n4',		
			n5 int '..//@n5',		
			n6 int '..//@n6',
			compliance varchar (50) '..//@compliance',		
			u1_date varchar (20) './/u1/@date', 
			u1_time varchar (20) './/u1/@time', 
			u1_sysdate varchar (20) './/u1/@sysdate', 
			u1_docs int './/u1/@docs', 
			u1_kind varchar (10) './/u1/@kind',
			u2_date varchar (20) './/u2/@date', 
			u2_time varchar (20) './/u2/@time', 
			u2_sysdate varchar (20)'.//u2/@sysdate', 
			u2_docs int './/u2/@docs', 
			u2_kind varchar (10)'.//u2/@kind',
			u3_date varchar (20) './/u3/@date', 
			u3_time varchar (20) './/u3/@time', 
			u3_sysdate varchar (20) './/u3/@sysdate', 
			u3_docs int'.//u3/@docs', 
			u3_kind varchar (10)'.//u3/@kind',
			u4_date varchar (20) './/u4/@date', 
			u4_time varchar (20) './/u4/@time', 
			u4_sysdate varchar (20) './/u4/@sysdate', 
			u4_docs int'.//u4/@docs', 
			u4_kind varchar (10)'.//u4/@kind',
			u5_date varchar (20) './/u5/@date', 
			u5_time varchar (20) './/u5/@time', 
			u5_sysdate varchar (20) './/u5/@sysdate', 
			u5_docs int'.//u5/@docs', 
			u5_kind varchar (10)'.//u5/@kind',
			u6_date varchar (20) './/u6/@date', 
			u6_time varchar (20) './/u6/@time', 
			u6_sysdate varchar (20) './/u6/@sysdate', 
			u6_docs int'.//u6/@docs', 
			u6_kind varchar (10)'.//u6/@kind',	
			u7_date varchar (20) './/u7/@date', 
			u7_time varchar (20) './/u7/@time', 
			u7_sysdate varchar (20) './/u7/@sysdate', 
			u7_docs int'.//u7/@docs', 
			u7_kind varchar (10)'.//u7/@kind',
			u8_date varchar (20) './/u8/@date', 
			u8_time varchar (20) './/u8/@time', 
			u8_sysdate varchar (20) './/u8/@sysdate', 
			u8_docs int'.//u8/@docs', 
			u8_kind varchar (10)'.//u8/@kind',	
			u9_date varchar (20) './/u9/@date', 
			u9_time varchar (20) './/u9/@time', 
			u9_sysdate varchar (20) './/u9/@sysdate', 
			u9_docs int './/u9/@docs', 
			u9_kind varchar (10) './/u9/@kind',
			u10_date varchar (20) './/u10/@date', 
			u10_time varchar (20) './/u10/@time', 
			u10_sysdate varchar (20) './/u10/@sysdate', 
			u10_docs int'.//u10/@docs', 
			u10_kind varchar (10)'.//u10/@kind',
			version varchar (50)'/user_info/res_version')

вываливается ошибка:
[Microsoft][ODBC SQL Server Driver][SQL Server]Ошибка преобразования datetime из символьной строки.

помогите!!! очень надо....
19 май 11, 17:47    [10680275]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar -> datetime  [new]
Glory
Member

Откуда:
Сообщений: 104751
Bulat2
[src]

помогите!!! очень надо....

Подъехать к вам и поправить во входном файле все неправильные символьные значения дат ?
19 май 11, 17:52    [10680302]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar -> datetime  [new]
Bulat2
Member

Откуда:
Сообщений: 57
он может выдать ошибку например если в символьной строке пусто?
19 май 11, 17:54    [10680313]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar -> datetime  [new]
Glory
Member

Откуда:
Сообщений: 104751
Bulat2
он может выдать ошибку например если в символьной строке пусто?

Попробовать самому select convert(datetime, '', 104) не судьба ?
19 май 11, 17:55    [10680322]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar -> datetime  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Bulat2,

104-й стиль - это только дата без времени с разделителем-точкой.
Для времени применяйте 114-й стиль!

http://msdn.microsoft.com/ru-ru/library/ms180878(v=SQL.100).aspx
http://msdn.microsoft.com/ru-ru/library/ms180878(v=SQL.100).aspx
19 май 11, 20:31    [10680858]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar -> datetime  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
Bulat2,

Для времени применяйте 114-й стиль!
Даже не так. Для времени достаточно 14-го стиля!
19 май 11, 20:33    [10680865]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar -> datetime  [new]
Antoshka
Member

Откуда:
Сообщений: 828
Налабайте на CLR обёртку над DateTime.Parse()
20 май 11, 22:54    [10687444]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar -> datetime  [new]
Antoshka
Member

Откуда:
Сообщений: 828
И можно будет любой формат конвертить указывая шаблон. Почему этого до сих пор сделали штатной фичей TSQL - загадка
20 май 11, 22:55    [10687449]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить