INSERT INTO zzzoneina
select * from rqout R
where not exists (select 1 from zzzoneina Z where gh=R.gh and gzk=R.gzk and zcdh=R.zcdh)
select * from rqout R
where not exists (select 1 from zzzoneina Z where gh=R.gh and gzk=R.gzk and zcdh=R.zcdh)
insert into zzzoneina
select * from rqout where cast(gh) + ',' + cast(gzk as varchar) + ',' + cast(zcdh as varchar) not in
(select cast(gh) + ',' + cast(gzk as varchar) + ',' + cast(zcdh as varchar) from zzzoneina)
你应该有时间字段.
这样也可以.insert into zzzoneina select * from rqout where convert(varchar(7),时间字段,120) = '2007-10'
2、保证目标字段个数和源字段个数相同,并且顺序相同
另外,我還想請問一個問題.這也是我造成這次錯誤的原因.這個數據庫設計的時候,日期的字段用varchar的類型.我刪除數據時用的命令如下:
delete from zzzoneina where rq_out<='2007/6/30'.
結果把2007年10月份的數據給刪掉了,所以我想可能是我的命令用錯了,但是錯在哪裡?小弟真的就不知道了,還請各位大哥賜教......
另外,我還想請問一個問題.這也是我造成這次錯誤的原因.這個數據庫設計的時候,日期的字段用varchar的類型.我刪除數據時用的命令如下:
delete from zzzoneina where rq_out <= '2007/6/30 '.
結果把2007年10月份的數據給刪掉了,所以我想可能是我的命令用錯了,但是錯在哪裡?小弟真的就不知道了,還請各位大哥賜教......对比看看下面的结果!!!
select 1 where convert(varchar(10),'2007/10/30',110)<='2007/6/30'
select 1 where convert(varchar(10),'2007/10/30',110)<='2007/06/30'
declare @a varchar(10)
declare @b varchar(10)
select @a = '2007/10/15',@b='2007/6/30'if @a < @b
print '小于'
else
print '大于'
--结果
/*
小于
*/--因为是按字符进行比较,当比较到第6个字符时,会认为'1'比'6'小,所以@a比@b小
--可以转换为日期型再比较
if cast(@a as datetime) < cast(@b as datetime)
print '小于'
else
print '大于'
--结果
/*
大于
*/
select 1 where '2007/10/30 ' <= '2007/6/30 ' select 1 where '2007/10/30 ' <= '2007/06/30 '
就是楼上的意思啦~~~
妳的解釋我終於明白了,也就是說我要刪除的結果並不是真正按照日期來做的.也就是說只要將rq_out這個字段的類型有varchar類型轉化為datetime類型就沒有問題了.是這樣的嗎?
記得還有一個日期函數datediff().但是不大會用.好像用這個也可以達到目的.例如要查詢從2006/10/1~2007/10/1的所有數據,不知哪位仁兄可以講解一二......
dobear_0922,dawugui,gahade,結貼給分.
同時也感謝其他朋友的支持!