преобразование типа данных даты в varchar - PullRequest
1 голос
/ 03 января 2011

У меня есть несколько полей дат в таблице. Эти столбцы содержат даты в следующем формате:

mmddyy

Например:

31/12/2010 00:00:00:0000

Мне нужно импортировать эти значения в таблицу, для которой заданы varchar и numeric, а даты форматируются так:

monthName varchar
Year numeric(4,0)

В настоящее время я использую

INSERT INTO [School].[dbo].[TeacherAttendenceDet] 
            ([TeacherCode], 
             [MonthName], 
             [Year]) 
(SELECT MAX(employeecode), 
        Datename(MONTH, dateofjoining) AS MONTH, 
        Datepart(YEAR, dateofjoining)  AS DATE 
 FROM   employeedet 
 GROUP  BY dateofjoining) 

но datename() дает результат в формате даты .. Я должен сохранить его в varchar формате

Как я могу это сделать? это таблица сотрудника:

EmployeeCode    numeric(5, 0)   
PayScaleCode    numeric(7, 0)   
DesignationCode varchar(50) 
CityCode    numeric(5, 0)   
EmployeeName    varchar(50) 
FatherName  varchar(50) 
BirthDate   varchar(50) 
DateOfJoining   varchar(50) 
Address varchar(150)    

это таблица учителей и учеников

TeacherCode numeric(5, 0)   Unchecked
Year    numeric(4, 0)   Unchecked
MonthName   varchar(12) Unchecked

Мне нужно вставить в таблицу teacherattendencedet имя месяца и год от сотрудника.

1 Ответ

2 голосов
/ 03 января 2011

Если бы я был на вашем месте, я бы сделал следующее:

  • обновить таблицу EmployeeMast, добавив столбец real DATETIME:

    ALTER TABLE dbo.EmployeeMast
      ADD JoinDate DATETIME
    
  • , затем преобразуйте все эти записи в datejoining в новый столбец даты и времени:

     UPDATE dbo.EmployeeMast
     SET JoinDate = CONVERT(DATETIME, SUBSTRING(datejoining, 1, 10), 103)
    
  • затем отбросьте этот старый столбец

      ALTER TABLE dbo.EmployeeMast DROP COLUMN datejoining
    

Теперь, когда у вас есть столбец DATETIME, вы можете начать использовать функции даты для этого!

Теперь ваш оператор INSERT должен работать - поскольку он получает свои значения из столбца DATETIME, он сможет вычислять DATENAME() и DATEPART()!

Если вы хотите, чтобы год (в виде чисел) и месяц (в виде строки) для даты объединения для каждой записи, я бы рекомендовал добавить два вычисляемых поля в вашу таблицу - что-то вроде:

alter table dbo.EmployeeMast
  add JoinYear AS YEAR(JoinDate) PERSISTED

alter table dbo.EmployeeMast
  add JoinMonth AS DATENAME(MONTH, JoinDate)

Теперь у вас есть два дополнительных столбца - JoinYear в виде числа, JoinMonth в виде строки, которые всегда будут отражать год и месяц, в которые кто-то присоединился - на основе JoinDate.

Они вычислены - вам не нужно вставлять их - они будут автоматически вычислены из JoinDate и всегда будут доступны для вас. Без преобразования, без беспорядочных вставок - просто вставьте строку с JoinDate, и вы сразу получите год и месяц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...