【问题标题】:T-SQL: SubString of a fieldT-SQL:字段的子字符串
【发布时间】:2017-07-14 02:59:52
【问题描述】:

我在这样的查询中选择一些字段:

SELECT DISTINCT 
    SummaryID = CAST(MT.Row_ID AS VARCHAR),
    MyCode = MT.My_UUID,
    MyDate = MT.MyDateTime, 
    Hyperlink = MT.Url,
    ArticleTypeID = @DefaultArticleTypeID
FROM 
    @Updates U
JOIN 
    dbo.MyItems MT ON U.RowID = MT.Row_ID

我将这些值插入到另一个表中,发现其中一个字段产生了这个错误:

字符串或二进制数据将被截断。

那是因为MT.Url 的 URL 比我的目的地可以容纳的长。

所以我的解决方案如下,它只是一个解决方法,因为我们将更改目标表的列作为永久解决方案,但这是一项更大的工作,在那之前,我有:

Hyperlink = SubString(MT.Url, 1, 1000),

并非所有 Url 都会超过该限制,大约只有 1%。

我的问题是,从性能角度来看,这是否是最佳解决方案?我最好在子字符串之前检查第一个长度吗?

【问题讨论】:

  • 我们一直使用子字符串,并没有看到任何性能损失。

标签: sql sql-server substring


【解决方案1】:

不用担心这样的性能微改进——您已经在做joinselect distinct

我会这样写查询:

SELECT DISTINCT SummaryID = CAST(MT.Row_ID AS VARCHAR(255)),
       MyCode = MT.My_UUID,
       MyDate = MT.MyDateTime, 
       Hyperlink = LEFT(MT.Url, 1000),
       ArticleTypeID = @DefaultArticleTypeID
FROM @Updates U JOIN 
     dbo.MyItems MT
     ON U.RowID = MT.Row_ID;

注意事项:

  • 如果不需要,请删除SELECT DISTINCT
  • LEFT()SUBSTR() 简单。
  • 在指定VARCHAR() 时始终包含长度。默认长度因上下文而异,可能不够长。

【讨论】:

  • 喜欢micro-improvements这个词和varchar的好亮点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 2013-11-19
  • 2021-09-19
  • 1970-01-01
  • 2010-11-19
  • 2011-03-23
  • 1970-01-01
相关资源
最近更新 更多