【问题标题】:Converting DateTime to String in a SQL Select statement to format correct DateTime in SQL Table在 SQL Select 语句中将 DateTime 转换为 String 以在 SQL 表中格式化正确的 DateTime
【发布时间】:2019-06-25 15:17:14
【问题描述】:

我正在通过我的 ASP.NET MVC 项目中的控制器将数据插入到 SQL Server 表中。我需要知道如何将 DateTime 格式化为字符串,以便 SQL Server 正确显示它。

这是我正在使用的代码

var queryable = ((IQueryable<PoScenarioQueueManager>)filters.ApplyTo(query)).ApplyCustomFilters();

var sql = queryable.ToParameterizedQuery();
var declaration = sql.Substring(0, sql.IndexOf("SELECT", StringComparison.CurrentCultureIgnoreCase));
var select = sql.Replace(declaration, "");
var statement = "@Declaration " +
                            "INSERT INTO dbo.ScenarioQueues (ScenarioUserId, ScenarioTypeId, ScenarioId" +
                            ", VendorNumber, VendorName, DepartmentNumber, DepartmentName, AuditReleaseId, ItemId, ItemNumber" +
                            ", ItemUpc, BeginDate, EndDate, PaidCost, NewCost, ImportItemsFilePath" +
                            ", ExportItemsFilePath, ScenarioSource, CreatedBy, ModifiedBy" +
                            ", CreatedDate, ModifiedDate, PoEvent, PoEventId, CheckStartDate, CheckEndDate)" +
                            "SELECT ScenarioUserId, ScenarioTypeId, ScenarioId, VendorNumber, VendorName" +
                            ", DepartmentNumber, DepartmentName, AuditReleaseId, ItemId, ItemNumber, ItemUpc" +
                            ", BeginDate, EndDate, PaidCost, NewCost, ImportItemsFilePath, ExportItemsFilePath" +
                            ", ScenarioSource, CreatedBy, ModifiedBy, CreatedDate, ModifiedDate, PoEvent" +
                            ", PoEventId, "+currentAuditstartDate.ToString("yyyy-MM-dd") + ", "+currentAuditendDate.ToString("yyyy-MM-dd")+ 
                            " FROM ( @Select ) As QUERY";

using (SqlConnection connection = new SqlConnection(entities.Database.Connection.ConnectionString))
{
    SqlCommand command = new SqlCommand(statement.Replace("@Declaration", declaration).Replace("@Select", select), connection);
    command.Connection.Open();
    command.ExecuteNonQuery();
}

SQL Server 中的表未显示正确的DateTime 格式。 currentAuditstartDatecurrentAuditendDate 没有正确传递,以便 SQL Server 显示正确的 DateTime 格式。

【问题讨论】:

  • 你应该参数化你的语句,而不是注入值。日期和时间数据类型没有“格式”,它们存储为二进制值。如何显示值取决于表示层,而不是 SQL Server,
  • 快速回答 - 'yyyyMMdd'(单引号)例如 '20020911' 是 ISO 格式 - 非常可靠
  • 另外,正如你现在写的,Sql Server 看到的是减法运算,而不是日期 2019-06-25 = 1988
  • DB<>fiddle 为例。每个字符串文字都是不同的,但是,每个值的最终结果都是相同的。在这种情况下,DB Fiddle 选择使用 dd/MM/yyyy hh:mm:ss 的显示格式(对我来说)。
  • 添加到@Steve 的评论中将被视为datetime 1905-06-12 00:00:00.000

标签: c# asp.net sql-server entity-framework


【解决方案1】:

试试这个

var statement = "@Declaration " +
                        "INSERT INTO dbo.ScenarioQueues (ScenarioUserId, ScenarioTypeId, ScenarioId" +
                        ", VendorNumber, VendorName, DepartmentNumber, DepartmentName, AuditReleaseId, ItemId, ItemNumber" +
                        ", ItemUpc, BeginDate, EndDate, PaidCost, NewCost, ImportItemsFilePath" +
                        ", ExportItemsFilePath, ScenarioSource, CreatedBy, ModifiedBy" +
                        ", CreatedDate, ModifiedDate, PoEvent, PoEventId, CheckStartDate, CheckEndDate)" +
                        "SELECT ScenarioUserId, ScenarioTypeId, ScenarioId, VendorNumber, VendorName" +
                        ", DepartmentNumber, DepartmentName, AuditReleaseId, ItemId, ItemNumber, ItemUpc" +
                        ", BeginDate, EndDate, PaidCost, NewCost, ImportItemsFilePath, ExportItemsFilePath" +
                        ", ScenarioSource, CreatedBy, ModifiedBy, CreatedDate, ModifiedDate, PoEvent" +
                        ", PoEventId, '" + currentAuditstartDate.ToString("yyyyMMdd") + "', '" + currentAuditendDate.ToString("yyyyMMdd") +
                        "' FROM ( @Select ) As QUERY";

'yyyyMMdd'(单引号)例如 '20020911' 是 ISO 格式 - 非常可靠

【讨论】:

  • 为什么不对查询进行适当的参数化?那么格式是字符串无所谓,因为数据类型是正确的。
  • @Cato - 非常感谢。正是我需要的。
猜你喜欢
  • 1970-01-01
  • 2022-11-05
  • 2015-04-13
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2013-06-29
  • 2016-11-30
相关资源
最近更新 更多