簡體   English   中英

如何在不使用mysql函數的情況下使每個單詞的首字母大寫?

[英]How to make first letter upper case in every word without using functions in mysql?

我在mysql中有這樣的字符串-“ my_report_id”。 我想刪除所有的“ _”並使每個單詞的首字母大寫。 最終結果應該是-“ MyReportId”。 是否有可能在不使用函數/進程的情況下在mysql中實現? 由於某些原因,我不想使用函數/過程:

  1. 我沒有創建它們的權限;
  2. 我正在構建的查詢應在許多數據庫中使用,並且我不想在要運行該查詢的每個數據庫中創建相同的函數;

我已經在Internet上的多個地方看到了很多使用相同功能的問題的解決方案,但是正如我已經寫的那樣,我不需要功能。

我的任務:基本上,我想達到的目標是將mysql表解析為ASP.NET MVC的C#模型類。 我需要在mysql中創建此“解析器”,並且發現此解決方案(提供的代碼的第二個答案)非常有用- 基於MySQL表創建C#類,我從鏈接的代碼開始並對其進行了更新,以解析可為空和未簽名的類型也一樣 我做了這樣的事情:

SELECT CONCAT('[Table(Name = "myTableName")]') UNION
SELECT CONCAT('public class ', "myTableName",'{') UNION
SELECT CONCAT('[Column(Name = "', COLUMN_NAME, '")] \n public ', 
CASE IS_NULLABLE
    WHEN 'NO' THEN
    CASE WHEN COLUMN_TYPE LIKE '%unsigned%' THEN myTypeNonNullableUnsigned.cSharpType
      ELSE myTypeNonNullable.cSharpType
    END
    WHEN 'YES' THEN
      CASE WHEN COLUMN_TYPE LIKE '%unsigned%' THEN myTypeNullableUnsigned.cSharpType
    ELSE myTypeNullable.cSharpType
    END
END, ' ',
CONCAT(UCASE(LEFT(COLUMN_NAME, 1)), SUBSTRING(COLUMN_NAME, 2)),
' {get;set;}')
FROM INFORMATION_SCHEMA.COLUMNS c
JOIN(
SELECT 'char' AS sqlType ,'string' AS cSharpType UNION ALL
SELECT 'varchar', 'string' UNION ALL
SELECT 'datetime', 'DateTime' UNION ALL
SELECT 'text', 'string' UNION ALL
SELECT 'tinyint', 'bool' UNION ALL
SELECT 'int', 'int' UNION ALL   
SELECT 'longtext', 'string' 
) myTypeNonNullable ON c.DATA_TYPE LIKE myTypeNonNullable.sqlType
JOIN( 
SELECT 'char' AS sqlType ,'string' AS cSharpType UNION ALL
SELECT 'varchar', 'string' UNION ALL
SELECT 'datetime', 'DateTime?' UNION ALL
SELECT 'text', 'string' UNION ALL
SELECT 'tinyint', 'bool?' UNION ALL
SELECT 'int', 'int?' UNION ALL  
SELECT 'longtext', 'string'
) myTypeNullable ON c.DATA_TYPE LIKE myTypeNullable.sqlType
JOIN(
SELECT 'char' AS sqlType ,'string' AS cSharpType UNION ALL
SELECT 'varchar', 'string' UNION ALL
SELECT 'datetime', 'DateTime' UNION ALL
SELECT 'text', 'string' UNION ALL
SELECT 'tinyint', 'bool' UNION ALL
SELECT 'int', 'uint' UNION ALL  
SELECT 'longtext', 'string' 
) myTypeNonNullableUnsigned ON c.DATA_TYPE LIKE myTypeNonNullableUnsigned.sqlType
JOIN(
SELECT 'char' AS sqlType ,'string' AS cSharpType UNION ALL
SELECT 'varchar', 'string' UNION ALL
SELECT 'datetime', 'DateTime' UNION ALL
SELECT 'text', 'string' UNION ALL
SELECT 'tinyint', 'bool' UNION ALL
SELECT 'int', 'uint?' UNION ALL 
SELECT 'longtext', 'string' 
) myTypeNullableUnsigned ON c.DATA_TYPE LIKE myTypeNullableUnsigned.sqlType
WHERE TABLE_SCHEMA='myTableSchema' AND TABLE_NAME='myTableName'
UNION
SELECT '}';

剩下的唯一事情就是使屬性名稱遵循c#命名約定。

也許它不是很漂亮,但是就目前而言,我擁有的是最好的解決方案。 任何幫助將不勝感激。

這是一個非常非常丑陋的解決方案,但在不使用功能的情況下,效果很好:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(COLUMN_NAME, '_a', 'A'), '_b', 'B'), '_c', 'C'), '_d', 'D'), '_e', 'E'), '_f', 'F'), '_g', 'G'), '_h', 'H'), '_i', 'I'), '_j', 'J'), '_k', 'K'), '_l', 'L'), '_m', 'M'), '_n', 'N'), '_o', 'O'), '_p', 'P'), '_q', 'Q'), '_r', 'R'), '_s', 'S'), '_t', 'T'), '_u', 'U'), '_v', 'V'), '_w', 'W'), '_x', 'X'), '_y', 'Y'), '_z', 'Z')

通過這種方式解析字母,可以遵循C#中的標准命名約定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM