【问题标题】:Convert text to datetime, and select between two dates将文本转换为日期时间,并在两个日期之间进行选择
【发布时间】:2013-06-17 13:40:38
【问题描述】:

我试图在两个日期(最后 100 天)之间获取一些值。但是我的专栏是一个文本字段,格式为:17.06.2013

SELECT
.....
WHERE Organizations.OrganizationID = '4360' 
AND convert(datetime,convert(varchar(10),StatisticsDate),104) BETWEEN       
    convert(datetime,GETDATE()-100,104) AND convert(datetime,GETDATE(),104) 
GROUP BY  Groups.Name, GroupStatistics.StatisticsDate

Mssql 错误: text、ntext 和 image 数据类型不能进行比较或排序,除非使用 IS NULL 或 LIKE 运算符。

谁能告诉我我做错了什么?

谢谢! :-)

更新:

[GroupStatisticsID] [int] IDENTITY(1,1) NOT NULL,
[GroupID] [int] NOT NULL,
[CreateUser] [nvarchar](max) NULL,
[StatisticsDate] [text] NULL,
[memberAttendants] [int] NOT NULL,
[Free] [int] NULL,
[FreeHours] [int] NULL,
[GroupName] [text] NULL,
[GroupNumber] [int] NULL,
[Ser] [text] NULL,
[SerNmbr] [int] NULL,
[SerName] [text] NULL

更新2: 我试过SELECT GETDATE(),它给了我:2013-06-18 22:38:25:270 这是否意味着我需要转换为这种格式才能使用BETWEEN

【问题讨论】:

  • 你能用数据类型发布你的表结构吗?
  • 为什么要使用 TEXT 作为 StatisticsDate? SQL Server 中的 TEXT 是为大文本块(最大 2GB)保留的,因此对于 GROUP BY 函数来说实际上是不可接受的。我真的无法理解您正在使用的日期需要存储在那个大小的字段中的情况。只是想知道。
  • 嗨莫里斯。新手无知。我认为现在改变它很复杂。但在我的下一个项目中,日期字段将是日期字段。

标签: sql-server


【解决方案1】:

与 between 的日期比较不是你的问题,因为你已经投了。

您必须使用非文本值分组:

GROUP BY  Name, convert(datetime,convert(varchar(10),StatisticsDate),104)

【讨论】:

  • 嗨,布米。现在我得到了这个错误:从字符串转换日期和/或时间时转换失败。
  • 可能有很多原因stackoverflow.com/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2017-11-16
  • 1970-01-01
  • 2014-08-13
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多