【发布时间】:2019-04-17 21:48:54
【问题描述】:
我的数据库中有一个数据类型为 varchar(10) 的字段。在这里,我正在节省 Hour:Minute AM/PM。我让用户从下拉列表中选择小时、分钟、上午/下午,我将其连接起来并将其保存到这样的表中:
01:00 PM
我想要做的是分离这个字符串,以便我能够提取小时、分钟和下午或上午。首先想到的是子字符串,所以这就是我一直在尝试的:
select substring('01:00 PM',1,2) as [Hour]
Select substring('01:00 PM',4,5) as [Minute]
select substring('01:00 PM',7,8) as [AMPM]
对于 Hour,我得到了正确的值,即 01。对于 Minute,我没有得到正确的值,它显示了 00 PM,然后对于 AMPM,我再次得到了正确的值 PM。为什么我在 Minute 中得到错误的值?或者是否有其他方法可以获得相同的结果,如01, 00, PM
【问题讨论】:
-
永远不要在 varchar 列中存储日期/时间值,使用正确的数据类型!
-
"
DATE在搜索/排序/加入/组/之间比VARCHAR更有效,所以VARCHAR()甚至不是一个选项”参见this 答案。 -
@jarlh 我需要能够让用户选择一个特定的分钟,所以我有分钟、小时和上午/下午的下拉菜单-使用日期时间字段的任何方式(我想你是建议?)
-
就 jarlh 而言,您可以将数据存储为日期时间(假设 SQL Server),但使用 DATEPART() 来显示分钟/小时/等。值供您的用户选择。
-
@Koosh 您将在应用程序代码中进行转换,而不是在数据库本身中。从输入构造一个适当的对象,然后执行查询以执行
insert语句。如果您需要将其呈现给用户,则在select上执行相反的操作。