2016-08-03 34 views
0

它是一个从类型date转换为字符串的变量。但是,我想在天选择使用它。如何使用变量作为它的原始值,它被转换为SQL中的字符串?

SELECT t1, t2,CONVERT(varchar(10), mydate, 105) [mydate] FROM tableName 
WHERE [mydate] BETWEEN @dateStart AND @dateEnd 
ORDER BY mydate //error 

在上述的SQL查询,@dateStart@dateEnd是字符串类型的在C#(出头如 “26/07/2016”),但它并不重要。

问题是如何编写一个sql查询,它将返回字符串类型的mydate,但也会在其日期类型中进行计算。

[更新1]

我的测试案例。

startDayStr = DateTime.Now.ToString("yyyyMMdd"); 
endDayStr = DateTime.Now.Year.ToString() + "0101"; 

SqlCommand com = new SqlCommand("SELECT t1, t2,CONVERT(varchar(10), mydate, 105) [mydate] FROM tableName 
WHERE [mydate] BETWEEN @dateStart AND @dateEnd 
ORDER BY mydate //error", con); 
com.Parameters.AddWithValue("@dateStart", startDayStr); 
com.Parameters.AddWithValue("@dateEnd", endDayStr); 
// not thing selected 
+1

使用别名不是在'where'条款中得到支持。只需在'order by'中再次写下它即可。 –

+0

我会将@dateStart替换为“28/01/2016” –

+0

@kingyau - 您可以添加您收到的错误吗? –

回答

1
SELECT t1, t2,CONVERT(varchar(10), mydate, 105) [mydate] FROM tableName 
    WHERE mydate BETWEEN cast(@dateStart as date) AND cast(@dateEnd as date) 
    ORDER BY mydate 

使用上面的查询,并通过@dateStart和格式@dateEnd '年月日'

使用下面的代码,转换日期格式 'YYYYMMDD'

string datestart = DateTime.ParseExact(userDateInput, "dd/MM/yyyy", CultureInfo.InvariantCulture).ToString("yyyyMMdd"); 
+0

where部分中的[mydate]类型是什么?日期或varchar? –

+0

类型与数据库列类型相同,即日期 –

+0

如何以格式'dd/MM/yyyy'传递dateStart和dateEnd?这是需要的,因为dateStar是由用户输入的... –

相关问题