首页 文章

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

提问于
浏览
1

我有一个使用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 回答

  • 3

    Storing date values as nvarchar is not recommended at all

    有许多建议可以提高连接性能:

    • 使用 Date 数据类型

    • 使用两个数字字段月份和年份而不是一个varchar字段( tinyint 表示月份, smallint 表示年份,可以使用 only for joining purpose

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

相关问题