2014-12-27 3 views
1

Следующий оператор SELECT работает и возвращает дату в правильном FORMAT.Формат даты в инструкции INSERT

SELECT 
' - '+c.[customercli] 
,c.[customerlookup] 
,c.[customername] 
,c.[linedescription] 
,c.[Sum of buy price] 
,c.[Sum of sell price] 
,c.[qty] 
,c.[Billingmonth] 
,FORMAT([FromDate],'dd/MM/yyyy') 
,FORMAT([ToDate],'dd/MM/yyyy') 

FROM [MasterBill].[dbo].[DaisyCallsCurrentBill] c 

Но когда я запускаю следующий оператор INSERT/SELECT, я получаю следующую ошибку.

«Конверсия не удалась при преобразовании даты и/или времени из символьной строки».

INSERT INTO [MasterBill].[dbo].[CurrentBillMaster] 
([identifier] 
,[customer id] 
,[customer name] 
,[description] 
,[buy price] 
,[sell price] 
,[qty] 
,[Billingmonth] 
,[FromDate] 
,[ToDate]) 

SELECT 
' - '+c.[customercli] 
,c.[customerlookup] 
,c.[customername] 
,c.[linedescription] 
,c.[Sum of buy price] 
,c.[Sum of sell price] 
,c.[qty] 
,c.[Billingmonth] 
,FORMAT([FromDate],'dd/MM/yyyy') 
,FORMAT([ToDate],'dd/MM/yyyy') 

FROM [MasterBill].[dbo].[DaisyCallsCurrentBill] c 

The FromDate и ToDate на обеих таблицах сконфигурированы с типом «дата»

Любая помощь очень ценится.

UPDATE:. Дата в следующем формате на [DBO] [DaisyCallsCurrentBill] таблица 2014-09-01 - Я просто хочу, чтобы изменить это 01/09/2014

ответ

2

Вот это выглядит, как вы вставляете даты, которая в строковом типе. Удалите функцию формата, и она должна работать. Зачем? Форматирование - это всего лишь способ представляют дату. База данных хранит дату по-своему, вы не можете ее изменить.

+0

Но формат в моей таблице дБ составляет 2014-09-01 - мне нужно, чтобы он был 01/09/2014. – user3580480

+0

2014-09-01 - это базовая база данных ** показывает ** дату. Если вы хотите увидеть его в 01/09/2014, вы используете форматирование. Прочитайте [this] (http://sqlmag.com/sql-server/solving-datetime-mystery) и [это] (http://blogs.lessthandot.com/index.php/datamgmt/datadesign/how-are- даты сохраненный-в-SQL-сервер /). Надеюсь, поможет. – Bhaskar

+0

@ user3580480 -In база данных Дата будет храниться только в 'yyy-mm-dd hh: mm: ss'. Если вы хотите изменить способ хранения, измените свой тип данных на varchar, но это не имеет смысла. Все эти форматирование должны выполняться только во фронтальной части во время отображения. почему вы действительно беспокоитесь о том, как он хранится –

0

Поскольку вы выбираете date поля и попытаться вставить его в другое date поля, форматирование не имеет смысл, и не должно быть использовано:

INSERT INTO [MasterBill].[dbo].[CurrentBillMaster] 
([identifier] 
,[customer id] 
,[customer name] 
,[description] 
,[buy price] 
,[sell price] 
,[qty] 
,[Billingmonth] 
,[FromDate] 
,[ToDate]) 

SELECT 
' - '+c.[customercli] 
,c.[customerlookup] 
,c.[customername] 
,c.[linedescription] 
,c.[Sum of buy price] 
,c.[Sum of sell price] 
,c.[qty] 
,c.[Billingmonth] 
,c.[FromDate], -- Note: no formatting 
,c.[ToDate] -- here too 

FROM [MasterBill].[dbo].[DaisyCallsCurrentBill] c 
+0

Но формат в моей таблице дБ составляет 2014-09-01 - мне нужно, чтобы это было 01/09/2014 – user3580480

+1

Нет такой вещи, как «формат в таблице» - это «дата», а не строка. То, что вы видите, это формат базы данных по умолчанию. Если вам нужно отобразить другой формат, просто отформатируйте его при запросе, как в первом запросе в вопросе. – Mureinik

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