将日期数据类型转换为varchar

时间:2011-01-03 06:18:24

标签: sql sql-server-2005

我在表格中有一些日期字段。这些列包含以下格式的日期:

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格式保存

我该怎么做? 这是employeemast表:

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)    

这是TeacherAttendenceDet表

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

我必须在teacherattendencedet表中插入employeemast的月份名和年份

1 个答案:

答案 0 :(得分:2)

如果我在你的位置,我会做以下事情:

  • 通过添加真实 EmployeeMast列来更新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插入行,您就可以立即获得年份和月份。