nvarchar或varchar或SQL Server联接中的日期

时间:2018-01-21 08:52:38

标签: sql sql-server tsql sql-server-2008-r2 sql-server-ce-4

我有一个使用SQL Server 2008 R2在Web上开发的管理项目和使用SQL Server CE 4.0的Windows应用程序。

两者使用几乎相同的数据库结构。我有一张费用表:

TABLE [fees] 
(
    [feeid] bigint NOT NULL IDENTITY(1,1),
    [acno] int NULL DEFAULT 0,
    [billingmonth] nvarchar(10) NULL,
    [oldbal] numeric(18,2) NULL DEFAULT 0,
    [duedtamt] numeric(18,2) NULL DEFAULT 0,
    [afterdtamt] numeric(18,2) NULL DEFAULT 0, 
    [bal] numeric(18,2) NULL DEFAULT 0,
    [depamt] numeric(18,2) NULL DEFAULT 0,
    [totdpo] numeric(18,2) NULL DEFAULT 0,
    [depdt] datetime NULL
)

billingmonth将始终使用格式MMM-yyyy,例如。扬-2018

BillingMonth在其他表中使用各种连接(内部和左外连接)。

如何使用BillingMonth提高联接的效果? ,我应该:

  • 将nvarchar转换为varchar(因为它将始终在SQL2008R2中存储Month)
  • 将nvarchar转换为datetime(在SQL Server CE和SQL Server 2008 R2中作为01-MMM-yyyy的第一天)

1 个答案:

答案 0 :(得分:3)

不建议将日期值存储为nvarchar

有许多建议可以提高连接效果:

  • 使用Date数据类型
  • 使用两个数字字段月份和年份而不是一个varchar字段tinyint表示月份,smallint表示年份,可以使用仅用于加入目的

请注意:AS @Pரதீப்提到,当您分别存储月份和年份时,您需要在搜索日期范围时进行一些整数操作