T-SQL, 216 ไบต์
ฉันใช้เวลาค่อนข้างตลอดสองสามคืนที่ผ่านมาพยายามสร้างฟังก์ชันลำดับทางคณิตศาสตร์ที่จะปัดเศษอย่างถูกต้องเพื่อสร้างรหัส ASCII ที่เหมาะสมสำหรับตัวเลขจากรหัส ASCII ตามตัวอักษร มันมีจำนวนทศนิยมที่ไร้สาระในค่าสัมประสิทธิ์ แต่ใช้งานได้
อย่างไรก็ตามวิธีการที่มีเหตุผลของ Mattnewport นั้นทำงานใน SQL ด้วยราคาที่ต่ำกว่ามาก ๆ ดังนั้นฉันจึงเขียนคณิตศาสตร์ของฉันเองเพื่อเขา ขึ้นคะแนนเขามันเป็นทางออกที่สง่างาม!
นี่คือของฉัน:
DECLARE @p VARCHAR(MAX)='';WITH t AS(SELECT ASCII(LEFT(@s,1))c,2 i UNION ALL SELECT ASCII(SUBSTRING(@s,i,1)),i+1FROM t WHERE i<=LEN(@s))SELECT @p=@p+CHAR(CASE WHEN c>96THEN 20-c/122+5*c/16 ELSE c END)FROM t;SELECT @p
วิธีนี้ใช้ CTE แบบเรียกซ้ำเพื่อสร้างตัวอักษรสแต็กกะทันหันของตัวละครในหมายเลขโทรศัพท์และแปลตัวอักษรได้ทันทีจากนั้นก็ใช้ SQL trickery (SELECT @ p = @ p + columnValue) เพื่อจัดเรียงสตริงใหม่จาก CTE โดยไม่ต้องใช้ สร้างการสอบถามซ้ำอีกครั้ง
เอาท์พุท:
DECLARE @s VARCHAR(MAX)='1-800-abcdefghijklmnopqrstuvwxyz'
--above code runs here
1-800-22233344455566677778889999