如何在存储过程中存在空值时设置列的默认值

时间:2016-12-22 11:05:36

标签: sql sql-server stored-procedures default-value

您好我使用存储过程来获取不同表中的数据是我的存储过程。

  SELECT
  ev.Id,
  ev.Title,
  ev.PageUrl,
  ev.FromDate,
  ev.ToDate,
  ev.Isactive,
  CONVERT(char(10), eventtime, 108) as EventTime,
  ev.UserType,
  ev.Street,
  ev.Image,
  ev.Description,
  ev.City,
  ev.CountryCode,
  ev.CategoryId,
  ev.UserId,
  ev.StateCode,
  cm.Name as 'CountryName',
  sm.name as 'StateName',
  asp.FirstName as 'FirstName',
  Cat.Name as 'CategoryName',
  ev.ZipCode
 from events ev
 inner join countrymaster cm on ev.CountryCode=cm.Id
 inner join statemaster sm on ev.StateCode=sm.Id
 inner join category cat on ev.Categoryid=cat.Id
 left join aspnetusers asp on ev.userid=asp.Id
 order by createddate desc  

在第七栏

CONVERT(char(10), eventtime, 108) as EventTime,

我通过投射角色来获取活动时间 但是当我的事件时间为null时,它会像这样抛出错误

从'System.String'到'System.TimeSpan'的转换无效。

事件时间的数据类型是时间。

那么如果没有值存在,我如何设置eventtime列的默认值。

5 个答案:

答案 0 :(得分:1)

使用ISNULL()检查偶数时间是否为NULL。如果为空,则可以替换空字符串''或根据您的选择的其他日期。

CONVERT(char(10), ISNULL(eventtime,''), 108) as EventTime  // If you want to replace with empty string

CONVERT(char(10), ISNULL(eventtime,GETDATE()), 108) as EventTime  // If you want to replace with current date

DECLARE @default datetime='2016-12-22 16:43:22.560'
CONVERT(char(10), ISNULL(eventtime,@default), 108) as EventTime  // If you want to relace it with some variable.

答案 1 :(得分:1)

请使用

CONVERT(char(10),isnull(eventtime,getdate()),108)as EventTime

答案 2 :(得分:0)

在该列上使用COALESCE

CONVERT(char(10), COALESCE(eventtime, GETDATE()), 108) AS EventTime

这会使用当前日期/时间作为默认值,但您可以使用此方法所需的任何默认值。

答案 3 :(得分:0)

使用MediaCapture m = new MediaCapture(); await m.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = videoDevices.First().Id }) 表达式

CASE

答案 4 :(得分:0)

CASE WHEN eventtime IS NULL THEN GETDATE()
ELSE CONVERT(char(10), eventtime, 108) END AS EventTime,