【问题标题】:Issue with simple sorting. Should I fix at database or in code?简单排序的问题。我应该修复数据库还是代码?
【发布时间】:2015-01-20 15:33:08
【问题描述】:

我正在为包含桌号名称的表格列开发排序功能。

这是一个遗留程序,被设计成该列是 nvarchar。

正因为如此,排序函数不能按数字排序,如下所示:

我是否应该进入数据库并更改此列以将前导零添加到仅数字条目?由于列是 nvarchar,这甚至可行吗?

或者我应该在对象级别添加代码以在数据出现之前添加前导零?

【问题讨论】:

  • 如果您将它们添加到数据中,它将显示在您的列表中。如果您按照自己的方式进行操作,则会增加很多复杂性而没有什么好处。
  • 这是一个诚实的问题,为什么你们都投票反对他而不提及原因或提供重复链接?我们是来互相帮助的,为什么要劝阻新成员呢?我们曾经都是新人!
  • 主要基于意见 许多好问题会根据专家经验产生一定程度的意见,但对这个问题的回答往往几乎完全基于意见,而不是事实、参考资料或特定专业知识。

标签: asp.net sql-server database


【解决方案1】:

我会在我的类中添加一个 getter 属性,使其看起来像

public int Ordering
{
     get
     {
          return int.Parse(CharColumn);
     }
}

在获取这些对象的列表时,只需按该新属性排序。

SQL Server 建立在 SET Theory 的基础之上,SET Theory 指出,如果您对结果集进行排序,您将获得非关系数据。

【讨论】:

    【解决方案2】:

    我会用数值创建另一个数据库列(可能有一些列不能很好地转换,请确保您识别这些列并努力转换它们)。然后我会努力将您的应用程序转换为使用新值。如果转换太大,您可以确保所有新开发都使用新列,并且在下次有人触摸它时迁移旧代码。

    您的方法的风险太大,将它们存储在 varchar 中对于内存和处理能力来说都是低效的。添加零有助于排序,但不能解决根本问题。

    这是另一个我认为对你有帮助的问题:SQL Server : error converting data type varchar to numeric

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 2015-01-03
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多