【问题标题】:Select distinct values using like使用 like 选择不同的值
【发布时间】:2013-08-30 19:02:58
【问题描述】:

不确定标题是否真的使问题清楚,但基本上我在组合框中使用“SELECT DISTINCT”来查看不同的日志时间,但是日志时间列的格式(无法更改)是示例: 8 月 29 日晚上 9:21
8月29日晚上9点22分

这不好,因为即使使用 distinct 也会将它们判断为不同,因为它们是不同的。 我想要什么:我想要一个 sql 语句,它将查看值并仅根据第一部分选择一个不同的值,例如 8 月 29 日,而不考虑时间。

有人有任何想法/代码吗?

更新:: 我使用了 ypercube 的代码,它适用于我想要的过滤器,因此当我选择一个日期(例如 29/08/2013格式 "August 29th 9:21pm" ,以及如何在 c# 中执行此操作的想法?

【问题讨论】:

  • “格式”是指将日期存储在CHAR 列中?
  • SQL-Server 的哪个版本? 2012、2008R2、2008、2005? (可以使用SELECT @@VERSION ;查看)
  • @ypercube 日期为 varchar ,使用 sql server 2012
  • 格式和你显示的一样?没有一年?只有月、日、小时和分钟?

标签: sql sql-server distinct


【解决方案1】:

如果数据存储在 DATETIME 列中,并且您是 SQL-Server 的最新版本,则可以转换为 DATE

SELECT DISTINCT 
    CAST(created_at AS DATE) AS date_created_at 
FROM
    SSISLog ;

【讨论】:

  • 效果很好,谢谢!但是对于过滤器,我想要它,这样当我选择一个日期(例如 29/08/2013 " ,以及如何在 c# 中执行此操作的想法?
【解决方案2】:

我猜你想要像下面这样的东西

SELECT DISTINCT(DATE(created_at)) FROM users;

【讨论】:

  • 哪个版本的 SQL-Server 有 DATE() 作为函数?
  • @Salil 使用您的代码输入执行查询,代码更改为:SELECT DISTINCT DATE(created_at) AS Expr1 FROM SSISLog,我收到一条错误消息,指出 DATE 不是可识别的函数类型跨度>
  • 参考这个你可能会明白tutorialspoint.com/sql/sql-date-functions.htm
【解决方案3】:

试试:

SELECT DISTINCT DATEADD(dd, DATEDIFF(d, 0, cast(YourDateColumn as datetime)), 0) 
FROM LogTable

由于演员表,这在大型数据集上效率很低。但是由于您无法更改表格。否则我会建议添加一个 persisted computed 列,该列在更新表格时进行强制转换,并且您可以添加一个索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多