Sql 如何从字符串日期c获取年份#

Sql 如何从字符串日期c获取年份#,sql,Sql,我在sql server中有字符串date,我想使用ADO.Net检索大于或等于2018年的所有行。这就是我所完成的,但是结果.HasRows()返回false,尽管该表中已有行 这与文化有关吗 更新: 问题在于数据本身。有一些不同格式的日期。现在可以了 using (var command = connection.CreateCommand()) { command.CommandText = $"SELECT * $"FROM

我在sql server中有字符串date,我想使用ADO.Net检索大于或等于2018年的所有行。这就是我所完成的,但是
结果.HasRows()
返回false,尽管该表中已有行

这与文化有关吗


更新: 问题在于数据本身。有一些不同格式的日期。现在可以了

using (var command = connection.CreateCommand())
{
    command.CommandText = $"SELECT *
                          $"FROM [dbo].[tableName] " +
                          $"WHERE Year(CAST([tableNmae].Date as datetime)) >= {2018}  ";

     using (var result = command.ExecuteReader())
     {
        if (result.HasRows)
        {
             while (result.Read())
             {}
        }
     }
} 

不能对字符串类型使用CAST。您应该使用CONVERT而不是CAST

为什么是104?因为我把这个网站作为参考

注意:要使用CONVERT,列不能是ntext类型

如果你使用它,你会得到这个错误

不允许从数据类型ntext显式转换为datetime

如果未使用正确的拨号类型,则出现示例错误


欢迎来到堆栈溢出。我怀疑这是否真的是一个C#问题。您是否尝试过在SQL Server资源管理器中执行该查询,或者现在使用的任何名称?我非常希望这是一个SQL问题。这是一个SQL Server问题,而不是与C有关的问题。尝试在SSMS中使用相同的查询。你有任何记录吗?也许你应该使用
CONVERT
而不是
CAST
,并传递日期字符串的格式,以确保日期字符串不会被解释为false。这是一个SQL问题,而不是C。因此,假设表“Date”中的列是一个有效的datetime,我认为您需要从
cast
更改为
convert
,并使用一个数字指示符来告诉SQL日期的格式。然后您的
=
将正常工作,
year()
是一个整数,因此它将是
=2018
您的SQL
CAST([tableNmae]中有一个拼写错误。Date
我认为它应该是
CAST([tableName])。Date请注意
tableName
的拼写,我在SQL server中收到了这个错误消息。“将varchar数据类型转换为datetime数据类型导致值超出范围。“我的列类型是char@eva,因为您使用了错误的引用。您查看了我共享的链接吗?例如:dd.mm.yyyy格式104,mm/dd/yyyy格式101。Sen kendi veri formatına维吾尔人çevirme kullanmadın。我使用了104。因为我的日期格式是dd.mm.yyyy。Örnek tarih verisi paylaşır mısın?”?
using (var command = connection.CreateCommand())
{
    command.CommandText = $"SELECT *
                          $"FROM [dbo].[tableName] " +
                          $"WHERE Year(CONVERT(DATETIME,[tableNmae].Date,104)) >= {2018}  ";

     using (var result = command.ExecuteReader())
     {
        if (result.HasRows)
        {
             while (result.Read())
             {}
        }
     }
}