【问题标题】:Modify SQL result on the fly?即时修改 SQL 结果?
【发布时间】:2013-02-19 13:05:53
【问题描述】:

我有一个 SQL 查询:
SELECT DATEDIFF(deadline,CURDATE()) FROM tasks WHERE 1

结果是:3

如何将结果返回为:3 Days 而不是3

我知道我可以从我的 C# 代码中手动附加字符串,例如:

 string result = getSqlresult();
 string result += " Days";

但我想直接从 MySQL 数据库中以3 Days 的形式获取结果。

原因: 我将信息直接绑定到 datagridview,因此,为了修改结果,我需要遍历所有行并更新它们。所以为了提高性能,我需要直接从数据库中获取结果为3 Days 而不是3

任何帮助将不胜感激

【问题讨论】:

    标签: c# mysql .net sql


    【解决方案1】:

    您可以使用CONCAT 将字符串Days 连接到DATEDIFF 的结果中。

    SELECT CONCAT(DATEDIFF(deadline,CURDATE()), ' Days') 
    FROM tasks 
    WHERE 1
    

    如果您使用的是旧版本的MySQL,请将其转换为字符串,这样您就不会得到bolb 的结果。

    SELECT CONCAT(CAST(DATEDIFF(deadline,CURDATE()) AS CHAR(5)), ' Days') 
    FROM tasks 
    WHERE 1
    

    更新 1

    SELECT  CASE 
                WHEN DATEDIFF(deadline,CURDATE()) >= 0
                THEN CONCAT(DATEDIFF(deadline,CURDATE()), ' Days')
                ELSE CONCAT('Expired since ', DATEDIFF(deadline,CURDATE()) * -1, ' Days')
            END
    FROM    tasks
    

    【讨论】:

    • 我不相信这很容易!谢谢回答
    • 如果 DATEDIFF() 的值为负数,我如何显示Date expired
    • 不!只有当该值严格为负时,它才会显示类似Expired since 3 days
    • 非常感谢您的帮助
    • 不客气:D 顺便说一句,案例陈述中有一个拼写错误,但我用演示:D更新了答案
    猜你喜欢
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2015-03-03
    • 2017-10-25
    • 1970-01-01
    • 2011-07-08
    相关资源
    最近更新 更多