使用SQL查询将DateTime格式转换为MMMM yyyy,dd

时间:2018-10-25 13:39:16

标签: c# sql sql-server

我正在尝试将日期格式更改为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

2 个答案:

答案 0 :(得分:1)

您可以使用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

我只是对4毫米以上的记录进行了快速性能比较,其执行速度比FORMAT快了93%。

答案 1 :(得分:0)

1)您的函数返回dt

public DataTable YourMethodName()
{
    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];

    return dt;
}

2)然后,您可以访问dt并将所有date列设置为所需的格式,例如。

DataTable dt = YourMethodName();

var response = (from r in dt.AsEnumerable()
                select new
                {
                     panumber = r.Field<int>("panumber"),
                     //Do this for all remaing columns
                     admissiondate = r.Field<DateTime?>("admissiondate")?.ToString("MMMM yyyy, dd"),
                     dischargedate = r.Field<DateTime?>("dischargedate")?.ToString("MMMM yyyy, dd"),
                     txndate = r.Field<DateTime?>("txndate")?.ToString("MMMM yyyy, dd"),
                     //Do this for all remaing columns
                     comments = r.Field<string>("comments")
                }
               ).ToList();

3)您可以像上面的response那样使用DataSource以上的

Grid1.DataSource = response.ToList();
Grid1.DataBind();