【发布时间】:2010-07-21 12:56:28
【问题描述】:
我有一个名为 vw_FormatTable1 的视图,其中包含
Convert( CHAR ( <SIZE> ), Coalesce (Convert (VarChar, [<FIELD>],120),'')) AS [<FIELD>]
其中<SIZE> 是要输出的字段的宽度,<FIELD> 是字段名称
这个基本块在我的基表中的所有大约 600 个字段中重复,创建了一个超过 50,000 个字符的视图。
我的问题如下:
select
[CC_RENAL_SUPPORT_DAYS_1],
CONVERT(CHAR(3), COALESCE(CONVERT(VARCHAR, [CC_RENAL_SUPPORT_DAYS_1]), '')) AS [CC_RENAL_SUPPORT_DAYS_SPC]
from Table1
group by [CC_RENAL_SUPPORT_DAYS_1]
产生不同的结果
select
[CC_RENAL_SUPPORT_DAYS_1],
CONVERT(CHAR(3), COALESCE(CONVERT(VARCHAR, [CC_RENAL_SUPPORT_DAYS_1]),'')) AS [CC_RENAL_SUPPORT_DAYS_SPC]
from vw_FormatTable1
group by [CC_RENAL_SUPPORT_DAYS_1]
我不知道为什么?
第一个输出是
[CC_RENAL_SUPPORT_DAYS_1] [CC_RENAL_SUPPORT_DAYS_SPC]
-------------------------- --------------------------
001 001
002 002
而第二个输出是
[CC_RENAL_SUPPORT_DAYS_1] [CC_RENAL_SUPPORT_DAYS_SPC]
-------------------------- --------------------------
1 1
2 2
包含 120 不会导致此错误(因为我做了一些有和没有它的基本测试,但没有任何区别)
谁能回答:
- 为什么我会丢失前导零
- 为什么不能在我的第一个 SQL 语句中复制结果?
- 视图有大小限制吗?
提前致谢,
高烧
视图的 sn-p 是:
ALTER View [dbo].[vw_ver2_InpatientsLong_ReadyToExport]
AS
select top 100 percent
Convert(CHAR(6),coalesce(convert(varchar,[PRIME RECIPIENT],120),'')) AS [PRIME RECIPIENT],
Convert(CHAR(6),coalesce(convert(varchar,[COPY RECIPIENT 1],120),'')) AS [COPY RECIPIENT 1],
Convert(CHAR(6),coalesce(convert(varchar,[COPY RECIPIENT 2],120),'')) AS [COPY RECIPIENT 2],
Convert(CHAR(6),coalesce(convert(varchar,[COPY RECIPIENT 3],120),'')) AS [COPY RECIPIENT 3],
Convert(CHAR(6),coalesce(convert(varchar,[COPY RECIPIENT 4],120),'')) AS [COPY RECIPIENT 4],
Convert(CHAR(6),coalesce(convert(varchar,[COPY RECIPIENT 5],120),'')) AS [COPY RECIPIENT 5],
Convert(CHAR(5),coalesce(convert(varchar,[SENDER],120),'')) AS [SENDER],
Convert(CHAR(3),coalesce(convert(varchar,[CDS_GROUP],120),'')) AS [CDS GROUP],
Convert(CHAR(3),coalesce(convert(varchar,[CDS_TYPE],120),'')) AS [CDS TYPE],
Convert(CHAR(35),coalesce(convert(varchar,[CDS_ID],120),'')) AS [CDS_ID],
Convert(CHAR(1),coalesce(convert(varchar,[TEST_FLAG],120),'')) AS [TEST_FLAG],
Convert(CHAR(1),coalesce(convert(varchar,[UPDATE TYPE],120),'')) AS [UPDATE TYPE],
Convert(CHAR(3),coalesce(convert(varchar,[PROTOCOL IDENTIFIER],120),'')) AS [PROTOCOL IDENTIFIER],
Convert(CHAR(10),coalesce(convert(varchar,[BULKSTART],120),'')) AS [BULKSTART],
Convert(CHAR(10),coalesce(convert(varchar,[BULKEND],120),'')) AS [BULKEND],
Convert(CHAR(16),coalesce(convert(varchar,[DATETIME_CREATED],120),'')) AS [DATETIME_CREATED],
Convert(CHAR(5),coalesce(convert(varchar,[PROVIDER],120),'')) AS [PROVIDER],
Convert(CHAR(5),coalesce(convert(varchar,[PURCHASER],120),'')) AS [PURCHASER],
Convert(CHAR(6),coalesce(convert(varchar,[SERIAL_NO],120),'')) AS [SERIAL_NO],
Convert(CHAR(10),coalesce(convert(varchar,[CONTRACT_LINE_NO],120),'')) AS [CONTRACT_LINE_NO],
Convert(CHAR(17),coalesce(convert(varchar,[PURCH_REF],120),'')) AS [PURCH_REF],
Convert(CHAR(17),coalesce(convert(varchar,[NHS_NO],120),'')) AS [NHS_NO],
Convert(CHAR(2),coalesce(convert(varchar,[NNN_STATUS_IND],120),'')) AS [NNN_STATUS_IND],
Convert(CHAR(1),coalesce(convert(varchar,[name_format],120),'')) AS [name_status],
Convert(CHAR(1),coalesce(convert(varchar,[address_format],120),'')) AS [address_status],
Convert(CHAR(70),coalesce(convert(varchar,[NAME],120),'')) AS [NAME],
Convert(CHAR(35),coalesce(convert(varchar,[FORENAME],120),'')) AS [FORENAME],
Convert(CHAR(35),coalesce(convert(varchar,[HOMEADD1],120),'')) AS [HOMEADD1],
Convert(CHAR(35),coalesce(convert(varchar,[HOMEADD2],120),'')) AS [HOMEADD2],
Convert(CHAR(35),coalesce(convert(varchar,[HOMEADD3],120),'')) AS [HOMEADD3],
Convert(CHAR(35),coalesce(convert(varchar,[HOMEADD4],120),'')) AS [HOMEADD4],
Convert(CHAR(35),coalesce(convert(varchar,[HOMEADD5],120),'')) AS [HOMEADD5],
Convert(CHAR(8),coalesce(convert(varchar,[POSTCODE],120),'')) AS [POSTCODE],
Convert(CHAR(3),coalesce(convert(varchar,[HA],120),'')) AS [HA],
Convert(CHAR(1),coalesce(convert(varchar,[SEX],120),'')) AS [SEX],
Convert(CHAR(2),coalesce(convert(varchar,[CARER_SUPPORT_IND],120),'')) AS [CARER_SUPPORT_IND],
Convert(CHAR(10),coalesce(convert(varchar,[DOB],120),'')) AS [DOB],
Convert(CHAR(8),coalesce(convert(varchar,[GPREG],120),'')) AS [GPREG],
Convert(CHAR(6),coalesce(convert(varchar,[PRACREG],120),'')) AS [PRACREG],
Convert(CHAR(2),coalesce(convert(varchar,[ETHNICOR],120),'')) AS [ETHNICOR],
Convert(CHAR(10),coalesce(convert(varchar,[LOCPATID],120),'')) AS [LOCPATID],
Convert(CHAR(8),coalesce(convert(varchar,[REFERRER],120),'')) AS [REFERRER],
Convert(CHAR(6),coalesce(convert(varchar,[REF_ORG],120),'')) AS [REF_ORG],
Convert(CHAR(12),coalesce(convert(varchar,[PROV_SPELL],120),'')) AS [PROV_SPELL],
Convert(CHAR(2),coalesce(convert(varchar,[ADMIN_CATEGORY],120),'')) AS [ADMIN_CATEGORY],
Convert(CHAR(2),coalesce(convert(varchar,[LEGAL_STATUS],120),'')) AS [LEGAL_STATUS],
多行
Convert(CHAR(10),coalesce(convert(varchar,[MOM_NHS_NUM],120),'')) AS [MOM_NHS_NUM], 转换(CHAR(10),coalesce(convert(varchar,[MOM_PAT_ID],120),'')) 作为 [MOM_PAT_ID], 转换(CHAR(5),coalesce(convert(varchar,[MOM_PAT_ID_ORG],120),'')) AS [MOM_PAT_ID_ORG], 转换(CHAR(2),coalesce(convert(varchar,[MOM_NNN_STATUS],120),'')) 作为 [MOM_NNN_STATUS], 转换(CHAR(35),coalesce(convert(varchar,[MOM_USUAL_ADDRESSLINE_1],120),'')) 作为 [MOM_USUAL_ADDRESS_LINE_1], 转换(CHAR(35),coalesce(convert(varchar,[MOM_USUAL_ADDRESSLINE_2],120),'')) 作为 [MOM_USUAL_ADDRESS_LINE_2], 转换(CHAR(35),coalesce(convert(varchar,[MOM_USUAL_ADDRESSLINE_3],120),'')) 作为 [MOM_USUAL_ADDRESS_LINE_3], 转换(CHAR(35),coalesce(convert(varchar,[MOM_USUAL_ADDRESSLINE_4],120),'')) 作为 [MOM_USUAL_ADDRESS_LINE_4], 转换(CHAR(35),coalesce(convert(varchar,[MOM_USUAL_ADDRESSLINE_5],120),'')) 作为 [MOM_USUAL_ADDRESS_LINE_5], 转换(CHAR(8),coalesce(convert(varchar,[MOM_POSTCODE_OF_USUAL_ADDRESS],120),'')) 作为 [MOM_POSTCODE_OF_USUAL_ADDRESS], Convert(CHAR(17),coalesce(convert(varchar,[PROVIDER_REFERENCE_NUMBER],120),'')) AS [PROVIDER REFERENCE NUMBER], Convert(CHAR(5),coalesce(convert(varchar,[ORGANISATION_CODE(LOCAL PAT ID)],120),'')) AS [组织代码(LOCAL PAT ID)], 转换(CHAR(12),coalesce(convert(varchar,[UBRN],120),'')) 作为 [UBRN], 转换(CHAR(20),coalesce(convert(varchar,[CARE_PATHWAY_ID],120),'')) 作为 [CARE_PATHWAY_ID], 转换(CHAR(5),coalesce(convert(varchar,[CARE_PATWAY_ID_ORG],120),'')) 作为 [CARE_PATHWAY_ID_ORG], 转换(CHAR(2),coalesce(convert(varchar,[REF_TO_TREAT_PERIOD_STATUS],120),'')) 作为 [REF_TO_TREAT_PERIOD_STATUS], 转换(CHAR(10),合并(转换(varchar,[REF_TO_TREAT_PERIOD_START_DATE],120),''))作为 [REF_TO_TREAT_PERIOD_START_DATE], 转换(CHAR(10),coalesce(convert(varchar,[REF_TO_TREAT_PERIOD_END_DATE],120),'')) 作为 [REF_TO_TREAT_PERIOD_END_DATE] 来自 tbl_SUS_CDS130
【问题讨论】:
-
@user HTML 表格不受支持。您可以将其粘贴为纯文本然后选择代码并使用代码格式化按钮吗?
-
我试过了,好点了吗?
-
您需要向我们展示
vw_FormatTable1的定义,以便进行任何有用的分析! -
过于复杂、双重嵌套的 CONVERT 有什么特别的原因吗?难道你不能只使用
CONVERT(CHAR(3), COALESCE([CC_RENAL_SUPPORT_DAYS_1], ''))... 似乎有点没有意义先转换为 VARCHAR 然后再转换为 CHAR(3) ...... -
为了节省时间,我写了一个通用的转换语句,并复制它(使用 excel)来得出完整的语句。你认为它会影响事情吗?