我在表格中有一些日期字段。这些列包含以下格式的日期:
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的月份名和年份
答案 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
插入行,您就可以立即获得年份和月份。