我有以下代码,它按预期工作。
DECLARE @startdate datetime2 = '2007-05-05';
DECLARE @enddate datetime2 = '2007-05-04';
SELECT DATEDIFF(year, @startdate, @enddate);
我现在希望能够使用变量从"年,周,日等转换。所以我尝试了这个,但它没有用。有什么建议吗?
DECLARE @startdate datetime2 = '2007-05-05';
DECLARE @enddate datetime2 = '2007-05-04';
DECLARE @interval varchar = 'year'
SELECT DATEDIFF(@interval, @startdate, @enddate);
我得到: Msg 1023,Level 15,State 1,Line 25 为datediff指定的参数1无效。
谢谢,
Raul Gonzalez
答案 0 :(得分:2)
你必须为此使用动态sql。一旦你开始使用动态sql,你打开自己的SQL注入。这是你如何做到这一点,并保护自己免受SQL注入。 case表达式可能看起来有些奇怪,但是如果你的@interval中有一个不允许的值,那么整个sql字符串将为NULL并且不会对你的数据库造成任何伤害。另请注意,您没有为@interval指定长度。对于变量,默认长度为1,因此它只是'y'而不是您预期的'年'。始终指定变量的比例和精度。
DECLARE @startdate datetime2 = '2007-05-05';
DECLARE @enddate datetime2 = '2007-05-04';
DECLARE @interval varchar(10) = 'year'
declare @SQL nvarchar(max)
set @SQL = 'select datediff(' +
case @interval when 'year' then 'year'
when 'week' then 'week'
when 'days' then 'day'
end
+ ', @startdate, @enddate)'
exec sp_executesql @SQL, N'@startdate datetime2, @enddate datetime2', @startdate, @enddate
答案 1 :(得分:0)
你可以动态地做到这一点:
{{1}}
答案 2 :(得分:0)
现在让我们说我有以下内容:
while ($query->have_posts()) {
echo $query->the_post();
$id=get_the_id();
$imagen_ruta = get_post_custom_values($img = 'main_image');
$imagen = explode(",", $imagen_ruta[0]);
echo "<img style='width:200px; height:300px;' src='".
wp_get_attachment_url($imagen[0])."'>";
$nombre= get_post_custom_values($name = '_job_title');
$precio_1hora = get_post_custom_values($hora = '_precio_1hra');
echo " <br>".$nombre[0]." ".$precio_1hora[0];
$lugar_trabajo= get_post_custom_values($key = '_job_location');
echo " <br>".$lugar_trabajo[0];
echo "</div><br>";
}
结果是“12”
现在我希望将12个值显示为:
2017年11月3日
2017年12月3日
2018年1月3日
2018年2月3日
2018年3月3日
2018年4月3日
2018年5月3日
2018年6月3日
2018年7月3日
2018年8月3日
2018年9月3日
2018年10月3日