我在 mysql 中有一个像这样的字符串 - “my_report_id”。我想删除所有“_”并将每个单词中的所有第一个字母大写。最终结果应该是 - “MyReportId”。是否可以在不使用函数/过程的情况下在 mysql 中实现此目的?我不想使用函数/过程,有几个原因:
- 我没有创建它们的权限;
- 我正在构建的查询应该在很多数据库中使用,并且我不想在要运行查询的每个数据库中创建相同的函数;
我已经在互联网上的多个地方看到了很多具有相同功能的问题解决方案,但正如我已经写的那样,我不需要功能。
我的任务: 基本上我想要实现的是将 mysql 表解析为 ASP.NET MVC 的 C# 模型类。我需要在 mysql 中创建这个“解析器”,我发现这个解决方案(提供代码的第二个答案)非常有用 - Create C# classes based of MySQL table 我从链接中的代码开始,并将其更新为解析可为空和无符号类型。我做了这样的事情:
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# 中的标准命名约定。
关于c# - 如何在不使用mysql中的函数的情况下使每个单词的首字母大写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27296423/