我是一名PHP-MySql Guy&新的 vb.net& SQL Server CE。
如何根据日期处理记录?
考虑任何表格( tbl_demo ),其中一些列包含1列以存储今天的日期。
For example (table structure)- Id Name today
-- ----- -----
int nvarchar datetime
如果我在表格中有以下数据 -
Id Name today
-- ----- -----
1 vikram 11/08/2013 11:16:57 PM
那么如何通过仅向查询提供 11/08/2013 来检索此记录?
PS-
我在执行查询时面临以下问题(这里是代码片段) -
Dim Ddate As Date
Ddate = MonthCalendar1.SelectionRange.Start.ToString
SQLquery = "SELECT id,today FROM tbl_demo WHERE today = '" & Ddate & "'"
错误:The data type is not valid for the boolean operation.[Data type (if known) = datetime,Data type (if known) = nvarchar]
答案 0 :(得分:0)
虽然最好在where子句的字段中使用函数(性能明智),但这样做可以完成。
"SELECT id,today FROM tbl_demo WHERE CONVERT(DATETIME,CONVERT(VARCHAR,today,120)) = CONVERT(DATETIME,CONVERT(VARCHAR,'" & Ddate.ToString() & "',120))"
另一种方法是直接向ISO格式提供日期:
"SELECT id,today FROM tbl_demo WHERE CONVERT(DATETIME,CONVERT(VARCHAR,today,120)) = CONVERT(DATETIME,CONVERT(VARCHAR,'" & Ddate.ToString("yyyyMMdd") & "',120))"
我不确定它是否为SQL CE的yyyyMMdd或yyMMdd,所以最好尝试两者。
根据this MSDN article它应该是“yyMMdd”但它可能是一个错字...
答案 1 :(得分:0)
在试验期间...我的工作方式如下(如果我错了,请纠正我)
Dim Ddate As Date
Dim d, m, y
Ddate = MonthCalendar1.SelectionRange.Start.ToString
d = Ddate.ToString("dd")
m = Ddate.ToString("MM")
y = Ddate.ToString("yyyy")
查询是:
SQLquery = "SELECT billId,c_id,amount FROM tbl_outward WHERE (DATEPART(dd, ddate) = '" & d & "' AND DATEPART(mm, ddate) = '" & m & "' AND DATEPART(yyyy, ddate) = '" & y & "')"
答案 2 :(得分:0)
这是使用数据读取器的完整示例。如果您要一次处理一行,这是合适的。如果您需要保留内存中的所有行或执行进一步的操作,您可能需要使用ExecuteDataSet来获取值。
此示例将行值打印到命令行。
Dim recordDate as DateTime = new DateTime(2013,8,11)
Using connection As SqlCeConnection = New SqlCeConnection("Data Source=Database.sdf;Persist Security Info=False;")
connection.Open()
Using command As SqlCeCommand = connection.CreateCommand()
command.CommandText = "Select id, name, today from demo where today = @date"
Dim dateParameter As SqlCeParameter
dateParameter = New SqlCeParameter("@date", DbType.DateTime)
dateParameter.Value = recordDate
command.Parameters.Add(dateParameter)
Using reader As SqlCeDataReader = command.ExecuteReader()
Do While reader.Read()
Dim id As Integer = reader.GetInt32(0)
Dim name As String = reader.GetString(1)
Dim today As DateTime = reader.GetDateTime(2)
Console.WriteLine("{0,-4} {1,-10} {2,-10}", id, name, today)
Loop
End Using
End Using
End Using
需要注意的一些重要事项:
Console.WriteLine的第一个参数是字符串格式。 {0,-4}是一个占位符,将由下一个参数填充。 -4表示该值应显示为左对齐,列为4个字符宽。有关详细信息,请参阅MSDN上的String.Format方法文档。