Member 12988411 Ответов: 2

Я хочу сохранить дату из excel в SQL


я Тринг, чтобы сохранить файл данных Excel в таблицу SQL...данных Excel также содержит дату
получаю ошибку: 'conversion fail date/or time from character string'

Что я уже пробовал:

мой формат даты excel-это 10/11/17 или 10/11/2017
в sql тип столбца datetime

мой фрагмент sp -
MERGE INTO EmployeeDetails AS ED        
 USING @tvp_EmployeeDetails AS tED        
 ON ED.EmpCode = tED.EmpCode   
 AND isnull(ED.EmpCode,'') <> ''  
 and ED.EmpCode in (select EmpCode from dbo.UserDetails)  
 WHEN MATCHED THEN        
 UPDATE SET         
 ED.EmpCode = tED.EmpCode,        
 ED.DOJ = tED.DOJ,         
 ED.PermantAddress = tED.PermantAddress,        
 ED.PrimaryMissionID = tED.PrimaryMissionID,        
 ED.SecondaryMissionID = tED.SecondaryMissionID,        
 ED.AltitudeId = tED.AltitudeId,        
 ED.Extension = tED.Extension,        
 ED.ApplicationId_V1 = tED.ApplicationId_V1,        
 ED.ApplicationId_V2 = tED.ApplicationId_V2, 
 ED.ApplicationId_Others = tED.ApplicationId_Others, 
 ED.TrainingStartDate = tED.TrainingStartDate,  
 ED.TrainingEndDate = tED.TrainingEndDate,   
 ED.CertificationDate = tED.CertificationDate,   
 ED.CertificationAttempt = tED.CertificationAttempt,   
 ED.OnBoardDate = tED.OnBoardDate,
 ED.SeparationDate = case tED.SeparationDate when '' then null else  tED.SeparationDate end,
 ED.SeparationReason = tED.SeparationReason,
 ED.DisciplinaryAction = tED.DisciplinaryAction, 
 ED.EmpImage = tED.EmpImage,   
 ED.UpdatedBy =@UserID,     
 ED.UpdatedOn = GETDATE()      
 WHEN NOT MATCHED THEN      
INSERT ([EmpCode],[DOJ] ,[PermantAddress] ,[PrimaryMissionID] ,[SecondaryMissionID] ,[AltitudeId]  ,[Extension],[ApplicationId_V1]
       ,[ApplicationId_V2]  ,[ApplicationId_Others] ,[TrainingStartDate],[TrainingEndDate],[CertificationDate] ,[CertificationAttempt]
       ,[OnBoardDate] ,[SeparationDate],[SeparationReason],[DisciplinaryAction],[EmpImage] ,[CreatedBy],[CreatedOn])
 values (tED.EmpCode, case when isdate(tED.DOJ)=1 then tED.DOJ else null end ,
		tED.PermantAddress,tED.PrimaryMissionID,tED.SecondaryMissionID,tED.AltitudeId,tED.Extension,tED.ApplicationId_V1,
		tED.ApplicationId_V2, tED.ApplicationId_Others,	 case when isdate(tED.TrainingStartDate)=1 then tED.TrainingStartDate else null end,
		case when isdate(tED.TrainingEndDate)=1 then tED.TrainingEndDate else null end, case when isdate(tED.CertificationDate)=1 then tED.CertificationDate else null end,tED.CertificationAttempt,
		case when isdate(tED.OnBoardDate)=1 then tED.OnBoardDate else null end,
		case when isdate(tED.SeparationDate)=1 then tED.SeparationDate else null end ,tED.SeparationReason,tED.DisciplinaryAction,tED.EmpImage, @UserID, GETDATE()) ;

Suvendu Shekhar Giri

Попробуйте преобразовать содержимое этого столбца в "гггг-ММ-ДД" и посмотреть, поможет ли это :)

2 Ответов

Рейтинг:
1

Peter Leow

Вы должны преобразовать эту строку date в действительное datetime перед вставкой в sql, например

using System;
using System.Globalization;

public class Program
{
	public static void Main()
	{
		string dateString = "10/12/2017";
		string format1 = "d/M/yy";
		string format2 = "d/M/yyyy";
		DateTime dateTime;
		if (DateTime.TryParseExact(dateString, format1, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
		{
			Console.WriteLine(dateTime);
		}
		else if (DateTime.TryParseExact(dateString, format2, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
		{
			Console.WriteLine(dateTime);
		}
		else // not valid
		{
			Console.WriteLine("Not a valid date time, do something!");
		}
	}
}
Ссылка:
1. значение datetime.Метод TryParseExact (Система)[^]
2. Пользовательские строки формата даты и времени[^]


Рейтинг:
0

Sahan2u

Прежде всего посмотрите, каков формат даты(MM-DD-YY или YYYY-MM-DD или YYYY/MM/DD....и т. д.) вашего использования SQL server. Это основано на параметры сортировки sql.

Допустим, ваш sql-сервер сохранил дату и время в этом формате ГГГГ-ММ-ДД ЧЧ:МИ:СС

Самое простое, что вы можете сделать, это

1. скопируйте все данные из excel в блокнот. Он удалит все форматы excel, определенные для ваших данных.

2. Открыть новый файл Excel и нажмите сочетание клавиш Ctrl + A (Выделить все).

3. Щелкните правой кнопкой мыши и выберите форматировать ячейки

4. В форматировать ячейки окне выберите Текст как формат

5. Перейдите в блокнот, куда вы копируете данные и нажмите сочетание клавиш Ctrl + А

6. Теперь скопируйте и вставьте данные из блокнота в Excel.

7. Теперь у вас есть все столбцы в текстовом формате. Поэтому отредактируйте дату (если это необходимо) в формат даты, который предпочитает ваш sql. В моем случае формат таков ГГГГ-ММ-ДД

(Примечание: Не беспокойтесь о времени часть sql добавит это сама)

8. Теперь попробуйте импортировать данные из вновь созданного листа Excel в SQL