【问题标题】:How do I copy the contents of a field of datatype TEXT that's 900K+ characters long?如何复制长度为 900K+ 个字符的数据类型 TEXT 字段的内容?
【发布时间】:2019-12-21 11:06:28
【问题描述】:

我需要查看数据类型为 TEXT 的名为 RESPONSE_STREAM 的字段的某个子字符串。 RESPONSE_STREAM 的 DATALENGTH 是 913,948 个字符,在我的屏幕上看太长了。我需要从第一次出现“FLEKSHER”开始检索该字段的其余部分,以确定我的数据是否存在问题。 (考虑到我正在做的事情的性质——HIPAA 数据等,很难比这更具体。)

我已尝试将该字段选择到临时表中,然后右键单击该字段以将其复制并粘贴到 Word 文档中,但没有复制整个字段。

这是从它所在的表中选择字段到临时表的 SQL 查询:

SELECT RESPONSE_STREAM INTO #tmp_foo 
FROM CMS_BATCH_RESPONSE 
WHERE BATCH_UUID ='5F61FB04-8679-48F2-B747-30C9837C85EC' AND
      RESPONSE_TYPE_CODE = 835 AND
      RESPONSE_STREAM LIKE '%FLEKSHER%'

这样做告诉我整个字段中有 918,394 个字符: 从 #tmp_foo 中选择 DATALENGTH (RESPONSE_STREAM)

我希望下面的 SELECT 告诉我字符串“FLEKSHER”在 TEXT 字段中的开始位置——但它返回 0:

SELECT CHARINDEX ('FLEKSHER', RESPONSE_STREAM, 1) FROM #tmp_foo 

有什么方法可以从这个非常长的 TEXT 字段中检索子字符串?

【问题讨论】:

  • 您是否尝试使用 charindex 而不指定起始位置 (708)?您确定要查找的文本是 FLEKSHER 吗?
  • 只是猜测,但我怀疑您可能需要考虑stackoverflow.com/questions/11039552/…
  • Andres2142,感谢您发现这一点——我拿出了 708。这只是我正在尝试的东西。

标签: sql-server


【解决方案1】:

好吧,根据microsoft docs sql serverCHARINDEX 应该使用在要搜索的变量上,而不是从表中搜索。我会这样做,看看它是否有效:

DECLARE 
       @HUGESTRING VARCHAR(MAX);

SET @HUGESTRING = (SELECT RESPONSE_STREAM
                   FROM CMS_BATCH_RESPONSE
                   WHERE BATCH_UUID ='5F61FB04-8679-48F2-B747-30C9837C85EC' AND
                         RESPONSE_TYPE_CODE = 835);

SELECT CHARINDEX('FLEKSHER', @HUGESTRING);

【讨论】:

  • 谢谢你,Andres2142——成功了!我赞成您的回复,但由于我发布的内容不够多,因此没有显示出来。
  • 很高兴能为您提供帮助。甚至不能将其标记为答案?
猜你喜欢
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
相关资源
最近更新 更多