C# 查询日期而不是日期时间docdb
我正在使用docdb。我只想用date而不是datetime查询processTime。我的输入日期为2017年9月26日,仅限日期。在sql查询中,我使用cast函数将datetime转换为日期,但出现语法错误。我在c#中这样做。使用LINQ进行查询 我在文档数据库中有以下jsonC# 查询日期而不是日期时间docdb,c#,mysql,linq,azure-cosmosdb,C#,Mysql,Linq,Azure Cosmosdb,我正在使用docdb。我只想用date而不是datetime查询processTime。我的输入日期为2017年9月26日,仅限日期。在sql查询中,我使用cast函数将datetime转换为日期,但出现语法错误。我在c#中这样做。使用LINQ进行查询 我在文档数据库中有以下json [{ "processTime": "2017-09-26T21:05:28.7954106+05:30", "submittedBy": "671" } { "processTime": "2017-09-
[{
"processTime": "2017-09-26T21:05:28.7954106+05:30",
"submittedBy": "671"
}
{
"processTime": "2017-09-26T21:05:28.7954106+05:30",
"submittedBy": "679"
}
{
"processTime": "2017-09-26T21:05:28.7954106+05:30",
"submittedBy": "679"
}
]
我正在查询数据库,如下所示
new SqlQuerySpec()
{
QueryText = "SELECT * FROM cols e WHERE e.submittedBy = @ci AND CAST( e.processTime AS int) = @date",
Parameters = new SqlParameterCollection()
{
new SqlParameter("@ci", cid.ToString()),
new SqlParameter("@date", pdate)
}
}, DefaultOptions);
我在CAST函数附近遇到语法错误
{"Message: {\"errors\":[{\"severity\":\"Error\",\"location\":{\"start\":61,\"end\":65},\"code\":\"SC1001\",\"message\":\"Syntax error, incorrect syntax near 'CAST'.\"}]}\r\nActivityId: 5661ff3b-64cb-46d7-8c9e-0125145a8fb3"}
尝试使用DATE()函数仅获取processTime列的日期,如下所示:
new SqlQuerySpec()
{
QueryText = "SELECT * FROM cols e WHERE e.submittedBy = @ci AND DATE( e.processTime) = STR_TO_DATE(@date,'%d-%m-%Y')",
Parameters = new SqlParameterCollection()
{
new SqlParameter("@ci", cid.ToString()),
new SqlParameter("@date", pdate)
}
}, DefaultOptions);
您需要将pdate值从dd mm aaaa转换为aaaa mm dd
STR_TO_DATE(pdate,'%Y-%m-%d')
尝试使用DATE()函数仅获取processTime列的日期,如下所示:
new SqlQuerySpec()
{
QueryText = "SELECT * FROM cols e WHERE e.submittedBy = @ci AND DATE( e.processTime) = STR_TO_DATE(@date,'%d-%m-%Y')",
Parameters = new SqlParameterCollection()
{
new SqlParameter("@ci", cid.ToString()),
new SqlParameter("@date", pdate)
}
}, DefaultOptions);
您需要将pdate值从dd mm aaaa转换为aaaa mm dd
STR_TO_DATE(pdate,'%Y-%m-%d')
@nacho的答案看起来会奏效。然而,ISO-8601格式的优点在于,您也可以只进行字符串比较。因此,SQL查询变成:
SELECT * FROM cols e WHERE e.submittedBy = @ci AND STARTSWITH( e.processTime, @dateString)
@dateString应为类似“2017-10-20”格式的字符串
请注意,您也可以通过这种方式进行日期范围的设置,只要submittedBy字段上有一个范围索引,就可以使用不等式操作符>,并且@nacho的答案看起来是可行的。然而,ISO-8601格式的优点在于,您也可以只进行字符串比较。因此,SQL查询变成:
SELECT * FROM cols e WHERE e.submittedBy = @ci AND STARTSWITH( e.processTime, @dateString)
@dateString应为类似“2017-10-20”格式的字符串
注意,您也可以通过这种方式进行日期范围设置,只要submittedBy字段上有一个范围索引,就可以使用不等式运算符>和