update sale_fact set sale_time=replace(sale_time,'dd','1') where year(sale_time)=2003 and month(sale_time)=7再查看: select * from sale_fact where year(sale_time)=2003 and month(sale_time)=7但日期的'日‘并没有改变啊?
试试: update 表 set 日期字段=replace(日期字段,left(日期字段,2),'1')
Syntax error converting datetime from character string. 还是不行,看来 left()函数不能用于日期变量。
那不能用update,只能:select CONVERT(varchar(10),日期字段,120) from 表
你是什么意思? 是要把'日'这个字变成1,还是要把日期的日子设为1 如果是后者的话: update 表 set 日期字段=日期字段-day(日期字段)+1
where year(sale_time)=2003 and month(sale_time)=7再查看:
select * from sale_fact where year(sale_time)=2003 and month(sale_time)=7但日期的'日‘并没有改变啊?
update 表 set 日期字段=replace(日期字段,left(日期字段,2),'1')
还是不行,看来 left()函数不能用于日期变量。
是要把'日'这个字变成1,还是要把日期的日子设为1
如果是后者的话:
update 表 set 日期字段=日期字段-day(日期字段)+1
前者是 datetime类型,后者是int类型啊?这个不明白。请指教。
如果想更保险的话,可以这样:update 表 set 日期字段 = datediff(dd, 日期字段, -day(日期字段)+1)
你可以用dateadd函数实现更高级的功能,下面是从SQL SERVER帮助上的相关说明DATEADD
在向指定日期加上一段时间的基础上,返回新的 datetime 值。语法
DATEADD ( datepart , number, date ) 参数
datepart是规定应向日期的哪一部分返回新值的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。日期部分 缩写
Year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms
number是用来增加 datepart 的值。如果指定一个不是整数的值,则将废弃此值的小数部分。例如,如果为 datepart 指定 day,为 number 指定 1.75,则 date 将增加 1。date是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。有关指定日期的更多信息,请参见 datetime 和 smalldatetime。 如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。
set @dateX = '2001-1-3'
--月首
select @dateX-day(@dateX)+1
--月末
select dateadd(month,1,@dateX-day(@dateX)+1)-1
--本月多少天
SELECT 32-Day(@dt+(32-Day(@dt)))