sql-server - 选择日期(仅日期时间中的日期)

标签 sql-server vb.net

如何在数据库(sql server)中搜索日期格式为 dd/mm/yyyy h:mm:ss 的 dd/mm/yyyy 记录。

如果该列是日期,则工作正常,但是当我将其设置为日期时间并想查看数据库中是否有特定日期的记录时,它会有所不同,因为有时间。

那么如何仅当列是日期时间时才搜索日期。

这就是我正在使用的:

    If SQL.conn.State = ConnectionState.Open Then
        SQL.conn.Close()
    End If
    DateTime1.Format = DateTimePickerFormat.Custom
    DateTime1.CustomFormat = "yyyy/MM/dd"

    SQL.conn.Open()
    Dim cmd As New SqlCommand("Select count(eid) from employees_payroll WHERE eid=" & employee_id & " and wday= '" & DateTime1.Text & "'", SQL.conn)
    count = Convert.ToInt32(cmd.ExecuteScalar())
    SQL.conn.Close()
    DateTime1.CustomFormat = "yyyy-MM-dd"

最佳答案

几种解决方案。将日期时间转换为日期,这消除了时间

 Select * from table where cast (column as Date) = '1 jan 2017'

第二,使用日期差异函数

 Select * from table where datediff(day, column, '1Jan2017') = 0

第三,使用datediff和dateadd剥离时间部分

 Select * from table 
 where dateadd(day, datediff(day, 0, column), 0) = '1Jan2017'

另外,与一天开始和结束时的午夜进行比较

 Select * from table 
 where column >= '1 Jan 2017'
    and column < '2 jan 2017'

最后一个解决方案仅允许在日期列上使用索引

编辑(解决乔尔在评论中提出的问题): 请理解,您用来将此查询传递给服务器的 C# 代码很容易受到所谓的“SQL 注入(inject)”的攻击。如果您的应用程序根据不受信任的用户的输入构建此 SQL,则会引发灾难。作为乔;他在下面的回答中建议,应修改 C# 代码以使用具有定义参数的命令对象,而不是动态构造的 SQL。然而,SQL 语句本身仍然可以是上面建议的任何解决方案。

关于sql-server - 选择日期(仅日期时间中的日期),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41529096/

相关文章:

php - php与sql server集成的问题

xml - 将转换后的 xml 保存为 html

.net - vb net update UI控件来自单独的线程事件

c# - 在 Windows 资源管理器中打开文件夹结构时,DirectoryInfo.Delete(True) 不会删除

vb.net - 删除/清除文件的上次修改日期

sql - 按字母顺序连接字符串

sql-server - 使用 sql server Convert Function 将回历转换为公历日期

sql-server - 字符串结尾的通配符匹配索引

javascript - 使用 vb.net,我可以将此字符串转换为正则表达式吗?

php - 通过SSH隧道使用PHP连接到远程MSSQL服务器