C# 查询日期而不是日期时间docdb

C# 查询日期而不是日期时间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-

我正在使用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-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字段上有一个范围索引,就可以使用不等式运算符>和