C# 如何在不使用mysql函数的情况下使每个单词的首字母大写?
我在mysql中有这样一个字符串——“我的报告id”。我想删除所有“u”,并使每个单词的首字母大写。最终结果应该是“MyReportId”。在mysql中不使用functions/procs是否可以实现这一点?我不想使用函数/过程,因为以下几个原因:C# 如何在不使用mysql函数的情况下使每个单词的首字母大写?,c#,mysql,asp.net-mvc,C#,Mysql,Asp.net Mvc,我在mysql中有这样一个字符串——“我的报告id”。我想删除所有“u”,并使每个单词的首字母大写。最终结果应该是“MyReportId”。在mysql中不使用functions/procs是否可以实现这一点?我不想使用函数/过程,因为以下几个原因: 我没有创建它们的权限 我正在构建的查询应该在很多数据库中使用,我不想在运行查询的每个数据库中创建相同的函数 我已经在互联网上的多个地方看到了很多用相同函数解决问题的方法,但正如我已经写的那样,我不需要函数 我的任务: 基本上,我试图实现的是将mys
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#中的标准命名约定。为什么不能使用函数?这里有一个完美的答案,谢谢你的回答。我已经看过这个函数了,但是我必须用另一种方式来实现它。看我的问题,我在那里写了一些我不想使用funcs的原因。很遗憾,你真的不能这么做。C#标识符的穷人标题可以用regexp完成,但不幸的是,MySQL中的regexp支持匹配,但不支持替换…因此,即使是这样,您也需要一个函数(在这种情况下,您最好编写一个MAKE_VALID#u IDENTIFIER()UDF。好吧……恐怕您不能(在MySQL中)但是没有理由在编译之前不对生成的C#源文件进行后期处理…Adriano Rapetti,如果我在每个“#”后匹配字母,我会很容易地用mysql标准函数replace()替换它。之后,我已经有了将第一个字母大写的解决方案。还是我错了?