在对返回的结果使用小日期时间约束执行以下操作时,将得到零结果:
Execute sp_proc @DateOfBirth = '01/01/1900' 或
Execute sp_proc @DateOfBirth = '1900-01-01' ,但是当使用下面的varchar参数时,我突然得到了与2000年1月1日相对应的结果。小时间隐式转换是否不适用于mm/dd/YYYY日期而只适用于mm/dd/YY日期?
Execute sp_proc @DateOfBirth = '01/01/00' 这将返回01/01/2000生日的所有结果!
CREATE PROCEDURE [dbo].[sp_proc]
-- Add the parameters for the stored procedure here
@DateOfBirth SmallDateTime = null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT *
FROM
view_People
WHERE
FirstName LIKE '%' + IsNull(@FName ,FirstName) + '%'
AND
LastName LIKE '%' + IsNull(@LName,LastName) + '%'
AND
DOB = IsNull(@DateOfBirth,DOB)
AND
SSN = IsNull(@SSN,SSN)发布于 2009-02-03 17:06:30
"01/01/00“是根据”两位数年截止(http://msdn.microsoft.com/en-us/library/ms189577(SQL.90%29.aspx))“选项转换的。所以是2000年1月1日。
如果您发送' 1900 - 01 -01',那么您的代码显示只有当道布=01 1900年1月1日时才会得到结果。
除此之外,它就像广告中所说的那样起作用了。除非您想运行Execute sp_proc @DateOfBirth = DEFAULT来迫使道布被忽略
发布于 2009-02-03 17:21:13
从技术上讲,您应该比较以下内容的输出:
Execute sp_proc @DateOfBirth = '01/01/00'至:
Execute sp_proc @DateOfBirth = '01/01/2000'或
Execute sp_proc @DateOfBirth = '2000-01-01'发布于 2009-02-03 16:58:15
使用像YYYYMMDD这样的安全格式(没有破折号)
运行这些也看看会发生什么。
select convert(smalldatetime,'19000101')
select convert(smalldatetime,'01/01/00')
select convert(smalldatetime,0)https://stackoverflow.com/questions/507931
复制相似问题