当前位置:编程学习 > C#/ASP.NET >>

各位大侠帮我看一下这条查询最大单据编号的语句有什么错误

各位大侠帮我看一下这条查询最大单据编号的语句有什么错误,我的单据编号格式为(201011001即:年+月+001),SELECT TOP 1 djbh FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) = CONVERT (varchar(6), GETDATE(), 112)) ORDER BY id DESC --------------------编程问答-------------------- SUBSTRING(djbh, 1, 6) 截取后是20101100
 CONVERT (varchar(6), GETDATE(), 112) 转换后格式是yyyyMMdd,肯定不相等 --------------------编程问答-------------------- 语句没有问题. --------------------编程问答--------------------
引用 1 楼 ihandler 的回复:
SUBSTRING(djbh, 1, 6) 截取后是20101100
 CONVERT (varchar(6), GETDATE(), 112) 转换后格式是yyyyMMdd,肯定不相等


那么应该怎么写才对呢,昨天我的程序出错,是因为没有201012001 这种格式的单据编号,加入一条之后就不在出错,所以我知道是这条查询语句写的不全面 --------------------编程问答-------------------- 对一楼的回答非常不解. --------------------编程问答-------------------- select max(djbh) from 表名 --------------------编程问答--------------------
引用 5 楼 rufus_lee 的回复:
select max(djbh) from 表名

这样肯定不行,如果我的最大单据编号是201011100,就会出错 --------------------编程问答-------------------- 我觉得sql语句本身应该没有问题(或者说问题不大),无非返回的是0行,如果用max(djbh),返回的是null;

那么问题在你的后续处理,要考虑本月没有数据,取不到最大单据号的时候应该如何? --------------------编程问答--------------------
引用 7 楼 micro2000 的回复:
我觉得sql语句本身应该没有问题(或者说问题不大),无非返回的是0行,如果用max(djbh),返回的是null;

那么问题在你的后续处理,要考虑本月没有数据,取不到最大单据号的时候应该如何?

本月的单据编号我必须是要以201012开头,不能延续上个月的201011,关键是语句不知道怎么写,大侠,帮我写写吧 --------------------编程问答-------------------- 首先你这个设计方案是有缺陷的,要想做好这个方案不是一个表能解决的。
最简单的处理方法
表:Sequence表,上次取数,要增加个TimeStamp的数据类型,可以判断是否数据有变更
.Net 函数:用于获取最新的单据号。
我写过通用的取单据号的方案,是一套完整的小系统,有时间可以QQ找我,我解释一下。QQ:9690746

--------------------编程问答--------------------
--存在当天第一条 记录 就返回,不存就就拼接 一下 返回
if exists( SELECT TOP 1 1 FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) =
   CONVERT (varchar(6), GETDATE(), 112)) )
begin
SELECT TOP 1 djbh FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) = 
CONVERT (varchar(6), GETDATE(), 112)) ORDER BY id DESC
end
else 
begin
select CONVERT (varchar(6), GETDATE(), 112))  + '001'
end
--------------------编程问答--------------------
--存在当天第一条 记录 就返回,不存就就拼接 一下 返回
if exists( SELECT TOP 1 1 FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) =
   CONVERT (varchar(6), GETDATE(), 112)) )
begin
SELECT TOP 1 djbh FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) = 
CONVERT (varchar(6), GETDATE(), 112)) ORDER BY id DESC
end
else 
begin
select (CONVERT (varchar(6), GETDATE(), 112))  + '001' ) as djbh 
end
--------------------编程问答-------------------- 想知道您把这SQl语句写在什么地方,.aspx文件中,还是DateSet配置中? --------------------编程问答-------------------- 语句没错 --------------------编程问答-------------------- SELECT TOP 1 djbh FROM 表名 WHERE (year(djbh)=year(getdate()) and month(djbh)=month(getdate())) ORDER BY id DESC --------------------编程问答-------------------- 试下这条SQL吧。。。。。

select top 1 字段名 from 表名 where 字段名 like '%{0}%' order by 字段名 desc", DateTime.Now.ToString("yyyyMM")
--------------------编程问答-------------------- 上面两位,好像都有些语法错误,但我不知道错在哪 --------------------编程问答--------------------
SELECT SUBSTRING(djbh, 1, 6)+Max(SUBSTRING(djbh, 7, 3)) FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) = CONVERT (varchar(6), GETDATE(), 112)) ORDER BY id DESC

这一年的这个月的最大单据编号 --------------------编程问答--------------------
引用 12 楼 cwen0707 的回复:
想知道您把这SQl语句写在什么地方,.aspx文件中,还是DateSet配置中?


你原来那句 是怎样放的,这句就是怎样放的 --------------------编程问答-------------------- 报什么错。。。??把错误信息说下

引用 16 楼 cwen0707 的回复:
上面两位,好像都有些语法错误,但我不知道错在哪
--------------------编程问答-------------------- up+1
引用 11 楼 abcjun188 的回复:
SQL code
--存在当天第一条 记录 就返回,不存就就拼接 一下 返回
if exists( SELECT TOP 1 1 FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) =
   CONVERT (varchar(6), GETDATE(), 112)) )
begin
SELECT TOP 1 djbh FROM 表名 WHERE (SUBSTRING(dj……
--------------------编程问答--------------------
引用 14 楼 noway8881 的回复:
SELECT TOP 1 djbh FROM 表名 WHERE (year(djbh)=year(getdate()) and month(djbh)=month(getdate())) ORDER BY id DESC


字符串转化为Datetime 时发生错误 --------------------编程问答--------------------
select top 1 字段名 from 表名 where 字段名 like '%{0}%' order by 字段名 desc", DateTime.Now.ToString("yyyyMM")
[/Quote]

DateTime.Now.ToString("yyyyMM")无效

我是在DateSet中添加的sql语句 --------------------编程问答--------------------
引用 17 楼 longlonglo 的回复:
SELECT SUBSTRING(djbh, 1, 6)+Max(SUBSTRING(djbh, 7, 3)) FROM 表名 WHERE (SUBSTRING(djbh, 1, 6) = CONVERT (varchar(6), GETDATE(), 112)) ORDER BY id DESC

这一年的这个月的最大单据编号


报错:说id无效 
--------------------编程问答-------------------- 虽然有点不礼貌,但是MAX(ID)都通不过的话.

还拿ID作比较的对像干嘛?
这是典型的表功能设计缺失.

我们都要引起注意. --------------------编程问答-------------------- Msg 8118, Level 16, State 1, Line 1
列 'st_cg.djbh' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。
Msg 8126, Level 16, State 1, Line 1
列名 'st_cg.id' 在 ORDER BY 子句中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。 --------------------编程问答-------------------- string sql=string.Format(select top 1 字段名 from 表名 where 字段名 like '%{0}%' order by 字段名 desc", DateTime.Now.ToString("yyyyMM"));
把sql 傳過去。。。


引用 22 楼 cwen0707 的回复:
select top 1 字段名 from 表名 where 字段名 like '%{0}%' order by 字段名 desc", DateTime.Now.ToString("yyyyMM")


DateTime.Now.ToString("yyyyMM")无效

我是在DateSet中添加的sql语句
[/Quote]
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,