2016-03-02 66 views
0

是否可以为列值设置别名,因为我们是为sql server中的列标题设置的。为列值设置别名

或者如果有任何其他方式将我的列值转换为可读格式的客户端。

我有以下的系统生成的值:

BILL_DETAILS 
BILLING_MENU 
ComplaintNumberInput 
CUSTOMER_ACCOUNT_NUMBER_INPUT 
DEFAULTER 
FAULTS_SHUTDOWN_MENU 
KUNDA_CONNECTION 
LOAD_SHEDDING_MENU 
LOAD_SHEDDING_SCHEDULED 
loadSheddingScheduleReplayer 
loadSheddingStatus 
loadSheddingStatusReplayer 
MENU_CONTEXT_EVAL 
POWER_COMPLAINTS_MENU 
repaetComplaintStatus 

是否有可能改变它们在以下几点:每个值

BILL DETAILS 
BILLING MENU 
COMPLAINT NUMBER INPUT 
CUSTOMER ACCOUNT NUMBER INPUT 
DEFAULTER 
FAULTS SHUTDOWN MENU 
KUNDA CONNECTION 
LOAD SHEDDING MENU 
LOAD SHEDDING SCHEDULED 
LOAD SHEDDING SCHEDULE REPLAYER 
LOAD SHEDDING STATUS 
LOAD SHEDDING STATUS REPLAYER 
MENU CONTEXT EVAL 
POWER COMPLAINTS MENU 
REPEAT COMPLAINT STATUS 
+0

您可以创建一个视图。 –

+0

为什么不在应用程序代码中使用正则表达式,而是在数据库中更改数据库使所有空间位于您的应用程序代码中 –

+0

亲爱的这些是由IVR(交互式语音应答)服务器生成的值。我只能访问名为“Menu_Utilization”的数据库表和列名称MenuName,这些是菜单名称。 – BilalAhmed

回答

1

在sql中,别名是数据库对象的不同名称。价值观不属于这个范畴,所以不可能混淆它们。但是,您可以格式化查询的输出,但格式通常最好在表示层中执行,而不是在数据层中执行。

话虽如此,对于你的问题中的T-SQL的解决方案:

SELECT REPLACE(ColumnName, '_', ' ') As ColumnName 
FROM TableName 

这将转换所有强调为空格。

要处理另一种格式,您可以感谢Jeff Moden解决该问题(see this link)。

SELECT COALESCE(STUFF(ColumnName, NULLIF(patindex('%[a-z][A-Z]%', ColumnName COLLATE Latin1_General_BIN), 0) + 1, 0, ' '), Col) AS ColumnName 
FROM TableName 

所以结合上述两种溶液最终SQL应该是这样的:

SELECT REPLACE(COALESCE(STUFF(ColumnName, NULLIF(patindex('%[a-z][A-Z]%', ColumnName COLLATE Latin1_General_BIN), 0) + 1, 0, ' '), ColumnName), '_', ' ') AS ColumnName 
FROM TableName 

这种方式可以处理这些2种格式在纯T-SQL,而不必更改您的查询,每当一个新的值被添加到表格中。

下面是测试情况与您发布的值:

DECLARE @t TABLE (Col VARCHAR(40)) 

INSERT INTO @t VALUES 
('BILL_DETAILS'), 
('BILLING_MENU'), 
('ComplaintNumberInput'), 
('CUSTOMER_ACCOUNT_NUMBER_INPUT'), 
('DEFAULTER'), 
('FAULTS_SHUTDOWN_MENU'), 
('KUNDA_CONNECTION'), 
('LOAD_SHEDDING_MENU'), 
('LOAD_SHEDDING_SCHEDULED'), 
('loadSheddingScheduleReplayer'), 
('loadSheddingStatus'), 
('loadSheddingStatusReplayer'), 
('MENU_CONTEXT_EVAL'), 
('POWER_COMPLAINTS_MENU'), 
('repaetComplaintStatus') 

SELECT Col 
     ,UPPER(REPLACE(COALESCE(STUFF(col, NULLIF(patindex('%[a-z][A-Z]%', Col COLLATE Latin1_General_BIN), 0) + 1, 0, ' '), Col), '_', ' ')) AS NewCol 
FROM @t 

结果:

Col          NewCol 

BILL_DETAILS        BILL DETAILS 
BILLING_MENU        BILLING MENU 
ComplaintNumberInput      COMPLAINT NUMBERINPUT 
CUSTOMER_ACCOUNT_NUMBER_INPUT   CUSTOMER ACCOUNT NUMBER INPUT 
DEFAULTER        DEFAULTER 
FAULTS_SHUTDOWN_MENU      FAULTS SHUTDOWN MENU 
KUNDA_CONNECTION       KUNDA CONNECTION 
LOAD_SHEDDING_MENU      LOAD SHEDDING MENU 
LOAD_SHEDDING_SCHEDULED     LOAD SHEDDING SCHEDULED 
loadSheddingScheduleReplayer    LOAD SHEDDINGSCHEDULEREPLAYER 
loadSheddingStatus      LOAD SHEDDINGSTATUS 
loadSheddingStatusReplayer    LOAD SHEDDINGSTATUSREPLAYER 
MENU_CONTEXT_EVAL      MENU CONTEXT EVAL 
POWER_COMPLAINTS_MENU     POWER COMPLAINTS MENU 
repaetComplaintStatus     REPAET COMPLAINTSTATUS 
+0

你是惊人的(Y) – BilalAhmed

+0

@BilalAhmed:不,我只是有一些经验,我只是擅长使用谷歌搜索。我知道我的方式在SQL服务器,但我不匹配像现代,伯特兰等这样的大枪...无论如何,我很高兴我可以帮助。 –

+0

亲爱的@Zohar Peled:请帮助 http://stackoverflow.com/questions/35773590/sql-sub-query-self-join – BilalAhmed

0

使用case语句,如:

case old_column_name 
    when 'LOAD_SHEDDING_MENU' 
    then 'LOAD SHEDDING MENU' 
    when 'loadSheddingScheduleReplayer' 
    then 'LOAD SHEDDING SCHEDULE REPLAYER' 
    when ........... 
    then ........... 
end as column_name 
+0

否定选民......任何理由? – user2407394

+0

对不起,我没有投票作为否定。但据我所知,Case将仅选择一个对特定值为真的值。 – BilalAhmed

+0

不,你可以有多个时...然后在case语句.. – user2407394