c# - 如何在不使用mysql中的函数的情况下使每个单词的首字母大写?

标签 c# mysql asp.net-mvc

我在 mysql 中有一个像这样的字符串 - “my_report_id”。我想删除所有“_”并将每个单词中的所有第一个字母大写。最终结果应该是 - “MyReportId”。是否可以在不使用函数/过程的情况下在 mysql 中实现此目的?我不想使用函数/过程,有几个原因:

  1. 我没有创建它们的权限;
  2. 我正在构建的查询应该在很多数据库中使用,并且我不想在要运行查询的每个数据库中创建相同的函数;

我已经在互联网上的多个地方看到了很多具有相同功能的问题解决方案,但正如我已经写的那样,我不需要功能。

我的任务: 基本上我想要实现的是将 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/

相关文章:

c# - 在Gridview中检查重复项并显示错误消息(如果存在)?

c# - 在 C# 中查找斐波那契数列。 [欧拉计划练习]

Mysql查询选择两个表

MySQL blob : how to get just a subset of the stored data

asp.net-mvc - ASP.NET MVC - 如何获取 URL 而不是操作链接?

c# - 如何刷新 DbContext

c# - 如何通过这段代码匹配以 "أقول "开头的句子?

用于检索家庭电话或手机的 MySQL 查询

c# - Entity Framework 种子不工作

c# - 在具有 3 层架构的 ASP.NET MVC 应用程序中验证业务规则的更好方法是什么?