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