首页 > 代码库 > 机房收费系统中遇到的SQL语句问题

机房收费系统中遇到的SQL语句问题

个人版机房收费系统正在进行中,遇到了几个有关SQL语句的问题。

1.sum函数的使用:

在结账部分,要求出某个表中某一列的和。在第一次机房系统中,我不知道sum函数的存在,很傻很天真地用循环一个一个往上加。下面以求所有卡中余额的和来说说sum函数怎么使,SQL语句为:select sum(cash)from T_Card。这个格式不是固定的,可以根据需求更改,比如求多列的和:select sum(列名1),sum(列名2)...from [表名] where...。查询出来的结果只有一行,如果只查一列的和,就是一行一列,那个和在DataTable.Rows(0).Item(0)中。

2.coalesce函数的使用:

上面的sum函数轻轻松松地解决了求和的问题,随之又出现一个问题。比如说查询当天的充值金额一列的和,但当天没有充值记录,这时就返回一个“NULL”,在代码中如何处理呢?几经周折,找到了coalesce函数。当查询不到符合条件的结果时,我们让它返回"0",在SQL语句中这样来写:SELECTCOALESCE(SUM(cash),0) FROM T_Card WHERE ...

3. convert日期转换:

当初建表的时候,为了省事儿日期和时间没有分开,使用datetime数据类型,这样输入的时候日期和时间连在一起了。在结账的时候麻烦出来了,比如我要查询“2014-8-7”的充值记录,但我的表中时间都是“2014-8-7 hh:mm:ss”格式的。在我绝望地以为要改表的时候,输了一长串表达不清的句子给百度,居然找到了解决办法,利用convert日期转换。

convert的语法是:convert(类型,表达式/字段,样式),其中样式限于DateTime类型,"120"表示”2014-8-7 20:50:31“这种格式。具体的SQL语句这样写:

select coalesce (sum(addCash),0) from T_Recharge where (CONVERT(varchar(10), time, 120) = CONVERT(varchar(10), GETDATE(), 120)),表示从充值表中得到当天充值金额的总和。


小结:虽然在一年前就学过SQL语句,在两个系统中多次用到,而且在自考中这部分也占有一定的份量,但来来回回就会写最基本的那几句。通过以上遇到的几个问题,让我觉得知识真是学无止境,同时也体会到米老师那句“不怕不知道,就怕不知道”的含义。面对海量的知识,我们不可能啥都精通,但要知道它的存在。遇到问题,能够借助现代网络资源即时解决,从而高效学习,不断培养自己的学习能力。