在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
您可以创建一个视图。 –
为什么不在应用程序代码中使用正则表达式,而是在数据库中更改数据库使所有空间位于您的应用程序代码中 –
亲爱的这些是由IVR(交互式语音应答)服务器生成的值。我只能访问名为“Menu_Utilization”的数据库表和列名称MenuName,这些是菜单名称。 – BilalAhmed