在两个日期时间字段上排序。如果一个字段为 Null 如何避免 Sybase 使用默认日期时间填充它
Order by on Two Datetime Fields .If one field is Null How to avoid Sybase from populating it with default datetime
我正在使用 Select 查询将数据插入到临时 Table 中。在 Select 查询中,我正在对两列进行排序
insert into #temp
Select accnt_no,acct_name, start_date,end_date From table
Order by start_date DESC,end_date DESC
Select * from #temp
此处,当 start_date 字段中存在条目且 end_date 字段中存在 Null 条目时。在按操作排序期间,Sybase 将其填充为默认日期(1900 年 1 月 1 日) .我不希望发生这种情况。如果 end_date 字段为 Null 。数据应该写成 Null 。关于如何在从 table 获取数据时如何将其保持为 Null 的任何建议。
听起来像 table 定义要求 end_date 不为空,并且自动插入默认值以防止它们。你确定当你在 table 上直接 select 时没有排序和插入的混淆时甚至有空值吗?
我创建了一个具有默认值的可为 null 的日期时间列的临时 table。
默认值本身不是用来处理空值的,它们是用来处理未提供的插入中的缺失值的。如果我 运行 没有列列表的插入(就像你所做的那样)默认值不适用并且仍然插入空值。
我建议将列列表添加到您的插入语句中。这可能会阻止这个问题(或者暴露出一个不同的问题,让它们按错误的顺序排列。)
insert into #temp (accnt_no, accnt_name, start_date, end_date)
select accnt_no,acct_name, start_date,end_date from ...
如果您无权访问创建脚本,这里有一个查询可以帮助您找到任何列的实际默认值:
select c.name, object_name(cdefault), text
from tempdb..syscolumns c, tempdb..syscomments cm
where c.id = object_id('tempdb..#temp') and cm.id = c.cdefault
1/1/1900 通常来自尝试将空字符串转换为日期时间。
您的 'date' 源列是实际的日期时间数据类型还是字符串类型的 varchar 或 char?
我正在使用 Select 查询将数据插入到临时 Table 中。在 Select 查询中,我正在对两列进行排序
insert into #temp
Select accnt_no,acct_name, start_date,end_date From table
Order by start_date DESC,end_date DESC
Select * from #temp
此处,当 start_date 字段中存在条目且 end_date 字段中存在 Null 条目时。在按操作排序期间,Sybase 将其填充为默认日期(1900 年 1 月 1 日) .我不希望发生这种情况。如果 end_date 字段为 Null 。数据应该写成 Null 。关于如何在从 table 获取数据时如何将其保持为 Null 的任何建议。
听起来像 table 定义要求 end_date 不为空,并且自动插入默认值以防止它们。你确定当你在 table 上直接 select 时没有排序和插入的混淆时甚至有空值吗?
我创建了一个具有默认值的可为 null 的日期时间列的临时 table。
默认值本身不是用来处理空值的,它们是用来处理未提供的插入中的缺失值的。如果我 运行 没有列列表的插入(就像你所做的那样)默认值不适用并且仍然插入空值。
我建议将列列表添加到您的插入语句中。这可能会阻止这个问题(或者暴露出一个不同的问题,让它们按错误的顺序排列。)
insert into #temp (accnt_no, accnt_name, start_date, end_date)
select accnt_no,acct_name, start_date,end_date from ...
如果您无权访问创建脚本,这里有一个查询可以帮助您找到任何列的实际默认值:
select c.name, object_name(cdefault), text
from tempdb..syscolumns c, tempdb..syscomments cm
where c.id = object_id('tempdb..#temp') and cm.id = c.cdefault
1/1/1900 通常来自尝试将空字符串转换为日期时间。
您的 'date' 源列是实际的日期时间数据类型还是字符串类型的 varchar 或 char?