我有一个结果集,我必须在其中创建列名 ' 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();
}
答案 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这有帮助!