首页 > 解决方案 > 使用 SQL 查询将 DateTime 格式转换为 MMMM yyyy、dd

问题描述

我正在尝试将日期格式更改为 MM:yyyy:dd(2018 年 10 月 24 日),我已经尝试了所有我知道的方法,但它不起作用......这是我的代码(我上网的许多方法之一) :

DataTable dt = new DataTable();

SQLDataManager sql = new SQLDataManager(false);
string query = "SELECT * FROM member_case_management where panumber like '%'+ @value +'%'";

sql.AddParamAndValue("@value", searchvalue);

dt = sql.GetDataset(query, CommandType.Text).Tables[0];

var response = (from r in dt.AsEnumerable() 
                select new { a = r.Field<string>("a"), 
                              b = r.Field<DateTime>("b").ToString("MMMM yyyy, dd") }
               ).ToList();

return dt;

查询将获取数据库中的所有数据,但我希望日期以 MMMM yyyy, dd 表示,但得到的结果是

        panumber: 213456
        admissiondate: 6/21/2018 4:40:15 PM
        enrolleefeedback: satisfactory 
        enrolleestatus: treatment satisfactory
        statusdetails: planned discharge
        dischargedate: 6/21/2018 4:40:15 PM
        totaladmissiondays: 83days
        txndate: 6/21/2018 4:40:15 PM
        insuredid: 3431528465
        comments: satisfactory

标签: c#sqlsql-server

解决方案


您可以使用FORMAT自定义日期时间的输出:

SELECT FORMAT(GETDATE(), 'MMMM yyyy, dd')
-- Returns: October 2018, 25

请参阅:https ://docs.microsoft.com/en-us/sql/t-sql/functions/format-transact-sql?view=sql-server-2017

您没有提到查询中的列是源日期。假设该列被命名为“DateColumn”,您可以像这样调整您的查询:

string query = "SELECT *, FORMAT(DateColumn, 'MMMM:yyyy:dd') AS FormattedDate FROM member_case_management where panumber like '%'+ @value +'%'";

性能更新

正如评论中提到的,对于大型结果集,FORMAT可能会非常慢。如果这确实影响了您,这里有一个更手动的方法(再次假设“DateColumn”作为您的列的名称):

SELECT DATENAME(MONTH, DateColumn) + ' '
    + CONVERT(CHAR(4), YEAR(DateColumn)) + ', '
    + RIGHT('00' + CONVERT(VARCHAR(2), DAY(DateColumn)), 2) AS Formatted

我刚刚对刚刚超过 4MM 的记录进行了快速的性能比较,这比FORMAT同等记录快了大约 93%。


推荐阅读