服务器中的日期格式正在发生变化
Posted
技术标签:
【中文标题】服务器中的日期格式正在发生变化【英文标题】:Date format is getting change in server 【发布时间】:2021-09-29 11:59:12 【问题描述】:您好,我从 db 中获取日期,其中日期列的类型为“Date”,然后将其拆分并连接成一个字符串以存储在 db 中
Protected Sub btClick(sender As Object, e As EventArgs)
Dim dtMembers As DataTable = ViewState("dtMembers")
For i As Integer = 0 To dtMembers.Rows.Count - 1
For j As Integer = 0 To dtMembers.Columns.Count - 1
strMembers = strMembers + dtMembers.Rows(i)(j).ToString() + "#"
Next
strMembers = strMembers.Substring(0, strMembers.Length - 3) + "|"
Next
strMembers = strMembers.Substring(0, strMembers.Length - 1)
''then inserting it in db
End sub
在从本地环境执行程序时,它工作正常,时间存储为 28-09-2021 15:34:42,同时通过服务器执行程序,它以 12 小时格式存储 28-09-2021 03:34:42PM创建问题并抛出错误。 任何想法如何解决此问题将不胜感激。
【问题讨论】:
你没有显示任何 sql。 @OldProgrammer Sql = "INSERT INTO pbl(dtval) values ('" + strMembers+ "') date 是 strMembers 中的串联成员之一 @Shivam 请NOT使用字符串连接构建SQL语句;使用bind variables。 你到底为什么要取一个日期(“从数据库中获取日期,其中日期列的类型为“日期”)然后“拆分它”(大概是拆分DATE 数据类型中固有的日期和时间组件),然后将它们连接回一个字符串,并将该字符串存储回其他列?首先,这是浪费精力,其次,将 DATE 存储为 DATE 数据类型以外的任何数据类型(您说您已经拥有)是一个非常严重的设计缺陷。 【参考方案1】:在 Oracle 中,DATE
数据类型以二进制格式存储,由 1 个字节组成,分别代表世纪、世纪、月、日、小时、分钟和秒。
DATE
数据类型确实不存储任何格式信息。
例如:
CREATE TABLE table_name ( date_column DATE );
INSERT INTO table_name ( date_column )
VALUES ( TO_DATE( '28-09-2021 15:34:42', 'DD-MM-YYYY HH24:MI:SS' ) );
SELECT DUMP(date_column)
FROM table_name;
输出:
DUMP(DATE_COLUMN) Typ=12 Len=7: 120,121,9,28,16,35,43
原始日期值为 7 个字节:
世纪 + 100 世纪 + 100 月 天 小时 + 1 分钟 + 1 秒 + 1没有任何内容告诉您如何在显示 DATE
时对其进行格式化,并且数据库只会知道这些二进制值。
如果您想显示DATE
,那么它的显示格式完全取决于您使用的客户端应用程序。
例如,在 SQL/Plus 或 SQL Developer 中,它由用户的会话参数控制,the default display format 取决于您在世界的哪个位置。
在第三方应用程序中,显示格式与数据库无关;因此您需要在 VB 中设置该格式(通常在您的应用程序中以编程方式)。
通过服务器执行程序时,它以 12 小时格式存储 28-09-2021 03:34:42PM
不,如上所述,它不存储任何格式信息,也不存储为 12 小时制。
您需要在检索日期时将其格式化为所需的格式。
Sql = "INSERT INTO pbl(dtval) values ('" + strMembers+ "')"
日期是
strMembers
中的串联成员之一
使用字符串连接构建查询是一种不好的做法,因为它会导致 SQL 注入问题。
相反,您的陈述应该是:
Sql = "INSERT INTO pbl(dtval) values (:date_value)"
然后您应该将参数值添加为bind variables。
【讨论】:
以上是关于服务器中的日期格式正在发生变化的主要内容,如果未能解决你的问题,请参考以下文章
如果开始日期和结束日期跨越一个或多个月,则插入表格时日期格式会发生变化