列名作为mysql中的计算字符串

时间:2015-03-19 11:25:58

标签: mysql sql string

我有一个结果集,我必须在其中创建列名  ' LastWeek(3月12日 - 3月18日)'

首先,我尝试过简单的查询

SELECT COUNT(*) AS CONCAT('LastWeek (', DATE_FORMAT(DATE_SUB(DATE(NOW()), INTERVAL 7 DAY),'%D %M'),' - ',DATE_FORMAT(DATE_SUB(DATE(NOW()), INTERVAL 1 DAY),'%D %M'),')') From Mytable

但它失败了 然后我尝试了简单的sp

DELIMITER $$

USE `mydb`$$

DROP PROCEDURE IF EXISTS `test`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(  
    )
BEGIN
    DECLARE lv_Duration VARCHAR(100);    
         SET @lv_Duration = CONCAT('LastWeek (', DATE_FORMAT(DATE_SUB(DATE(NOW()), INTERVAL 7 DAY),'%D %M'),' - ',DATE_FORMAT(DATE_SUB(DATE(NOW()), INTERVAL 1 DAY),'%D %M'),')'); 
    SELECT 'test' AS @lv_Duration;
END$$

DELIMITER ;

但它也失败了。如果有可能,请告诉我 后来我通过通用C#方法

使用我的结果集
private string GetStoredProcedureWiseCustomResult(DataTable dt)
        {
            var str = new StringBuilder();
            foreach (DataColumn column in dt.Columns)
            {
                str.Append(String.Format("[{0}] {1}", column.ColumnName, "\t\t"));
            }
            str.Append(Environment.NewLine);
            foreach (DataRow dr in dt.Rows)
            {
                foreach (DataColumn column in dt.Columns)
                {
                    str.Append(String.Format("[{0}] {1}", dr[column.ColumnName], "\t\t"));
                }
                str.Append(Environment.NewLine);
            }
            return str.ToString();
        }

1 个答案:

答案 0 :(得分:0)

您可以动态创建查询,您可以在其中为您的列指定计算名称。例如,

string query =" SELECT COUNT(*)AS' LastWeek(" + FirstDate +"," + SecondDate +")' &#34 + "来自Mytable";

现在将此查询传递给存储过程以获取输出。

通过使用以下查询,您将根据需要获取列名称。您可以根据需要更新转换函数用于获取名称。

DECLARE @str1 NVARCHAR(MAX) 

SET @str1 = 'SELECT COUNT(*) AS ''LastWeek ('+ CONVERT(VARCHAR(20),DATEADD(DD,-7,GetDate()),110) + ', ' + CONVERT(VARCHAR(20),GetDate(),110) + ')'' FROM MyTable'

exec(@str1)

Hoper这有帮助!