Я создал таблицу, используя BULK INSERT
из файла CSV. Я пробовал с датой, но не смог пройти. Это давало мне ошибку, поэтому пробовал с TradeDate varchar(50)
, и все работало и сохранялось «11012012» в столбце Tradedate.Как фильтровать столбец даты VARCHAR (50) в SQL Server
Но, когда я пытался получить данные с помощью запроса на выборку:
SELECT *
FROM FundTranTest
WHERE CONVERT(DATETIME, RIGHT(TradeDate,4) + Left(TradeDate, 2) + SUBSTRING(TradeDate, 3, 2))
< '2012-12-29'
Я получил эту ошибку:
Msg 242, Level 16, State 3, Line 1
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
Как получить это сделано? Любая помощь будет большой.
затем пытался обновить таблицу, добавив столбец даты:
ALTER TABLE FundTranTest ADD TDate Date
WITH Udata AS
(select TradeDate as rcol
from FundTranTest
)
UPDATE FundTranTest SET TDate = CONVERT(DATETIME,RIGHT(rcol,4)+Left(rcol,2)+SUBSTRING(rcol,3,2))
FROM Udata u
where FundTranTest.TradeDate = u.rcol
но не работает ....
[Bad hab его удар: выбор неправильного типа данных] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data-type.aspx) - вы всегда должны использовать наиболее подходящий тип данных - вот для чего они нужны, в конце концов! –
Настройки глобализации? например, является ли SQL установленным для американского формата даты, где ваш CSV находится в британском формате? Если вы сохраните свои даты в виде длинной строки даты, то SQL может работать с ней намного проще. например, «11 янв 2012» – WraithNath
Пожалуйста, приложите усилия для форматирования и проверки ваших сообщений в будущем. См. Также http://stackoverflow.com/help/how-to-ask для некоторых советов. –