declare @account nvarchar(20)='20110000014'
前四位是年份
如果当前年大于 @account 结果是
20120000001
否则 @account 结果是
20110000015
解决方案 »
- 2008导出脚本在2000运行出错
- 对查询增加序列号的办法(晒晒,是否方便呢)
- 求救:在线等,进来看看
- SQL语句查询一个部门每一天的最后添加的数据的平均值
- Win7旗舰版新系统,无法连接Sybase
- 一个可能很简单的数据更新问题
- sql存储过程问题,望路过朋友能帮我解决,谢谢!
- 两个数据表的数据转移问题 急!
- net_steven,vfp_data,clear_liu,ltltlt快来帮忙。
- 请问在触发器中如何给存储过程传参数并执行(传入的参数为当前修改的ID号)急!!!
- SQL SERVER 那个版本开始支持 MERGE语句
- 请问,Oracle的varchar2类型与MSSQL中的哪个类型是对应的?
set @account=N'20110000014'
select case when datename(yy,getdate())>left(@account,4) then '20120000001' else '20110000015' end
declare @account nvarchar(20)
set @account=N'20110000014'
select case when datename(yy,getdate())>left(@account,4) then '20120000001'
else cast(@account as bigint)+1 end
我自己写了个复杂的
declare @account nvarchar(20)='20110000001'
declare @code nvarchar(20),@Lastyear nvarchar(20),@CurrentYear nvarchar(20),@zero int
set @code=right(@account,6)
set @Lastyear=left(CONVERT(varchar(100), @account, 112),4)
set @CurrentYear=left(CONVERT(varchar(100), GETDATE(), 112),4)
if cast(@Lastyear as int)<cast(@CurrentYear as int)
begin
set @account=@CurrentYear+'00000001'
end
else
begin
set @code=(@code+1)
declare @len int=len(@code+1)
set @zero=8-@len
select @zero
while @zero>0
begin
set @code='0'+@code
set @zero=@zero-1
end
set @account=@Lastyear+@code
end
select @account
set @account=N'20110000016'
select case when datename(yy,getdate())>left(@account,4) then left(CONVERT(varchar(100), GETDATE(), 112),4) +'0000001'
else cast(@account as bigint)+1 end
set @account=N'20110000014'
select case when datepart(yy,getdate())>left(@account,4) then '20120000001' else '20110000015' end
SET @account = N'20110000016'
SELECT CASE
WHEN YEAR(GETDATE()) = LEFT(@account, 4) THEN CAST(CAST(@account AS BIGINT) + 1 AS NVARCHAR)
ELSE DATENAME(yy, GETDATE()) + '0000001'
END